2012-05-10 32 views
0

我已經看到許多js框架(包括jquery)圍繞它們的主要功能範圍使用閉包。例如,JavaScript - 爲什麼調用函數定義在閉合內?

var obj = (function(){ 
    return { 
     test : function(){ 
      alert('test'); 
     } 
    } 
})(); 
obj.test() 

jQuery的來源, http://code.jquery.com/jquery-1.7.2.js

請告訴我需要那額外的 '封閉' 圍繞 '功能'?或者什麼,如果我們使用它像差,

var obj = function(){ 
    return { 
     test : function(){ 
      alert('test'); 
     } 
    } 
}(); 
obj.test() 

都具有相同的行爲和功能定義本身提出了新的範圍內的所有局部變量...那麼,爲什麼多餘的封?

+4

您發佈的兩段代碼是相同的。 –

+0

你似乎意思是「括號」而不是「封閉」。 – Ashe

+0

http://stackoverflow.com/questions/6645766/why-are-parenthesis-used-to-wrap-a-javascript-function-call –

回答

4

它添加了「大」對象\庫函數,而不是將它們添加到全局對象。

您粘貼的兩個選項是一樣的區別:

var foo = (2); 
var foo = 2; 

沒有區別...


更新:

現在我undersatnd你的問題,括號不要創建JavaScript中的新範圍,只有函數。

+0

@gdoron我以爲他問爲什麼不只是'var obj = {0121}測試:function(){ alert('test'); } };' – xdazz

+0

謝謝,它幫助:) –

0

這只是一個能夠輕鬆區分自執行功能與常規功能的慣例。

相關問題