2008-12-23 12 views

Odpowiedz

21

Wykorzystuje korpus funkcji do zapewnienia własnego zakresu zamiast wprowadzania dużej liczby globaliów, które mogą zostać przypadkowo zmienione przez zewnętrzny kod.

Np.

(function(){ 
    var someConstantValue = ...; 
    myCoolFunction = function(){ return someConstantValue * 5; } 
})(); 

myCoolFunction(); 

Jeśli zakres funkcji nie zostały wprowadzone byłoby możliwe, aby przypadkowo zmienić someConstantValue wprowadzając inny kod (lub inną bibliotekę)

someConstantValue = someOtherValue; // this won't change the behaviour of myCoolFunction 
6

Masz rację, że będzie zapobiegać zanieczyszczeniom globalny przestrzeń nazw.

Wszystkie zmienne i funkcje, których potrzebuje jQuery, są tworzone wewnątrz tej funkcji, co powoduje, że te funkcje i zmienne nie krwawią do globalnej przestrzeni nazw. Jeśli spojrzeć na ten fragment kodu:.

var jQuery = window.jQuery = window.$ = function(selector, context) { 
// The jQuery object is actually just the init constructor 'enhanced' 
return new jQuery.fn.init(selector, context); 
}; 

to faktycznie łączącej inicjator jQuery światem zewnętrznym poprzez ustawienie window.jQuery i okna $ do funkcji inicjalizacji. Jest to jedyne miejsce, w którym zmienne wewnątrz funkcji opakowania są dostępne bezpośrednio poza opakowaniem.

Należy zauważyć, że cała funkcja jest zawijana w ten sposób (funkcja ,,,)(), która wykona tę funkcję, gdy tylko plik się załaduje.

Powiązane problemy