2013-10-10 21 views
10

Basit, (function() {...})();?Neden bazı js dosyaları ile başlarım (function() {

+0

İşte ilgili bir SO sorusu: http://stackoverflow.com/questions/1140089/how-does-an-anonymous-function-in-javascript-work. Bu, imo, yinelenen olarak kapatılmalıdır. –

+2

Bu soru bir kopya değildir ve başvurulan soruyla ilgili hiçbir şey yoktur, çünkü başvurulan soru, bu gönderide olduğu gibi bir kapağın amacının ne olduğunu sormadığından, başvurulan soru, çağrının neden aynı satırda olması gerektiğini sorar. beyanname olarak –

cevap

13

(function() { /* code here */ })() formunun kodu "Hemen Başlatılan İşlev İfadesi" olarak bilinir. Sıklıkla bir kapanma kurmak için kullanılır, böylece global kapsamı kirletmeden değişkenleri tanımlayabilirsiniz. Bunu, Ember, jQuery'de ve hemen hemen her "plug-in" içinde bulabilirsiniz. Genel kapsamı kirletmek genellikle kötü bir fikirdir, ancak tüm sitelerde çalışması gereken eklentilerle, sitenin yaratıcısının kullandığı bir değişkenin yanlışlıkla üzerine yazılmamasını sağlamak özellikle önemlidir.

Elbette, başka kullanımlar da var. Örneğin, şöyle "çapa" bir yineleme değişkeni, için kullanılabilir:

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. 

Bazen IIFEs kullanan bazı durumlar da vardır ki insanların çoğu olur böyle bir "tam olarak muhtemelen linç bana, -zaman" hesaplama:

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 
} 

yukarıda if deyimi atlayarak önce hesaplanmış olsaydı çok daha iyi olurdu, bu yüzden ... Ben bu sefer yaptığım gibi yapmayın!

7

sözdizimi

(function(){ 
    /* code */ 
}()); 

ile başladı ile böyle Ember veya jquery.js gibi bazı js dosyaları() başlamak yapmak neden . kodun hemen son satırında hemen sonra çalıştırır anonim fonksiyonunu diğer fonksiyonların değişkenlerini kapsam için kullanılır çağrılan olarak bilir fazlası için

. http://en.wikipedia.org/wiki/Immediately-invoked_function_expression

İlgili konular