2011-03-28 79 views
2

我在很多脚本这种模式的Javascript解释这个代码,请

(function(){})(); 

这是什么,以及为什么使用它看到了什么?

+0

这基本上是一个匿名函数。在这里看到更多的细节http://stackoverflow.com/questions/1140089/how-does-an-anonymous-function-in-javascript-work – ashishjmeshram 2011-03-28 13:42:49

回答

4

它被用来强制创建一个本地范围,它避免了通过声明污染当前(通常是全局的)范围。

它可以改写这样的,如果你想避免匿名函数:

var scope = function() { /*...*/ }; 
scope(); 

但匿名函数的语法具有以下优势:父母或全球范围甚至不是的名字poluted功能。

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

这也是实现信息隐藏在JavaScript作为在此范围内声明(函数和变量)将无法从外面看到的好办法。但是他们仍然可以看到对方,并且在此范围内声明的JavaScript实现闭包函数将可以访问同一范围内的其他声明。

1

这是定义一个没有名字的函数,并立即调用它。因为Javascript函数充当关闭 - 持久作用域 - 这是创建一组互连对象或函数的有用方法。

1

匿名函数是一个函数(或子例程),可以在不绑定标识符的情况下定义并且可能被调用。

1

这是创建闭包的基本语法。更典型的,它会包含一些代码:

(function(){ 
    //Your Code Here 
})(); 

这相当于

var some_function = function() { 
    //Your Code Here 
}; 
some_function(); 

这样做的最大的原因是清洁;在任何函数之外声明的变量都是全局的;然而,这个函数内部声明的变量包含在这个函数内部,并且不会影响函数之外的任何代码或与之交互。将任何一种可重用插件封装在闭包中是一种很好的做法。

1

它立即执行匿名功能。 它基本上相同:

var test = function(){}; 
test(); 

但是不需要使用额外的变量。 您需要将其包装在其他括号中以获取作为表达式结果的函数 - 否则将其理解为函数声明,并且不能执行声明。

它主要用于范围保护 - 因为JS具有功能范围,所以在这样的函数中定义为var x;的每个变量都将保留在它的函数本地范围内。

所有这些仅仅意味着'立即执行该函数中的所有内容而不会污染全局范围'。

它也常用于众所周知的模式,如模块模式和揭示模块模式。请参阅http://www.adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-Depth了解更多详情。

0

它被称为立即功能匿名闭包,是the module pattern的基础。

它用于为代码创建私有本地范围。