2011-09-28 35 views
5

Bazı sitelerde bazı JS kodlarında bu gibi bir Javascript kodu görüyorum:Javascript'te bu kod nedir?

SomeName.init = (function() { 
    // some stuff 
})(); 

Yani, bu gibi bir jQuery eklenti kodu değil:

(function($){ 
    $.fn.myPlugin = function() { 

    // Do your awesome plugin stuff here 

    }; 
})(jQuery); 

O zaman ne var? ve sonuçta ortaya çıkan JS nesnesi nedir?

+0

Ne istediğinizi bilmiyorum. Her iki snippet, hem ilan edilen hem de çalıştırılan bir işlevi gösterir. Bunun ötesinde, alakalı görünmüyorlar. –

+0

Birincisi, anonim bir işlevin sonuçlarını "init" adlı bir değişkene ayarlıyor. İkinci örnekte de görüldüğü gibi, anonim işlev genellikle PLUG-IN'in (veya modüllerin) oluşturulmasında kullanılan bir tasarım modelidir ve bu nedenle genellikle 'Modül Kalıbı' olarak adlandırılır. Başlığınızı arama kutusuna yazdığımda –

+0

[İşte bulduğum şey] (http://stackoverflow.com/questions/5101638/what-does-this-javascript-code-mean). – user113716

cevap

2

Module Pattern. Ve bu iki parçacığın düşündüğünden daha ortak.

8

var kullanarak değişkenleri bildirirken değişkenlere küresel kapsamı sızdırmayan anonim bir işlevdir. anonim işlev bildirimi işlevini yürütür () sonra, çünkü

SomeName.init = (function() { 
    return 3.1415; 
})(); 

SomeName.init

, bir sayı (3.1415) 'dir. anonim fonksiyon içinde tanımlanan sürece orijinal fonksiyonunu elde etmek hiçbir şekilde, vardır:

(function foo(){ 
    //foo refers to this function 
    too = foo; 
})();; 
//foo is undefined 
//too refers to the function, because `too` has been defined without var 
0

İşlev ne olursa olsun geri döner.

(function() { 
    //... 
})(); 

Ad alanı kodunun bir yolu olarak kullanılır veya kendi başına çalışan kurucular bildirilir. Ortaya çıkan nesne, kendi kendini yürütme işlevinin geri döndüğü şeydir.

İkinci pasaj hiçbir şey döndürmez ve resulting JS object yoktur.

1
(function() { 
    // some stuff 
})() 

, kendisini anında çağıran anonim bir işlevdir. Değişken kapsamı küresel hale getirmek için içerideki kodun sadece bir kapanışıdır.