2013-10-10 10 views
10

Proste, dlaczego niektóre pliki js (takich jak Ember lub jquery.js) zacząć (function() {...})();?Dlaczego niektóre js pliki zacząć (function() {

+0

Oto jedno istotne pytanie na SO: http://stackoverflow.com/questions/1140089/how-does-an-anonymous-function-in-javascript-work. Powinno to zostać zamknięte jako duplikat. –

+2

To pytanie nie jest duplikatem i nie ma nic z zadanym pytaniem, ponieważ zadane pytanie nie pyta, jaki jest cel zamknięcia, jak w tym poście, zamiast tego zadane pytanie zadaje pytanie, dlaczego wywołanie musi znajdować się w tym samym wierszu jako deklaracja –

Odpowiedz

13

Kod formularza (function() { /* code here */ })() jest znany jako "Wyrażenie funkcji natychmiastowego wywołania". Jest często używany do konfigurowania zamknięcia, więc możesz definiować zmienne bez zanieczyszczania zasięgu globalnego. Znajdziesz go w Ember, jQuery i prawie we wszystkich innych "wtyczkach" z tego powodu. Zanieczyszczenie zasięgu globalnego jest generalnie złym pomysłem, ale z wtyczkami, które muszą działać we wszystkich witrynach, szczególnie ważne jest upewnienie się, że przypadkowo nie zastąpi on zmiennej używanej przez twórcę witryny.

Oczywiście istnieją inne zastosowania. Na przykład, może on być stosowany do „kotwicy” zmiennej iteracji, tak:

for(i=0; i<links.length; i++) { 
    (function(i) { 
     links[i].onclick = function() {alert(i);}; 
    })(i); 
} 
// without the IIFE, all links would alert the value of links.length instead. 

Istnieją również przypadki, że od czasu do czasu korzystają IIFEs że większość ludzi prawdopodobnie Lynch mnie, takie jak „just-in -time”obliczenia:

if((function() { 
     var party=document.getElementById('party').children, l=party.length, i, r=0; 
     for(i=0; i<l; i++) if(party[i].children.length > 0) r++; 
     return r; 
    })() == 6) { 
    // your Party is full 
} 

powyższy byłoby znacznie lepiej, gdyby zostały obliczone przed skokiem do rachunku if, więc ... nie rób tak jak ja na ten jeden!

Powiązane problemy