2012-05-10 34 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

这只是一个能够轻松区分自执行功能与常规功能的惯例。

相关问题