javascript中的独立括号
可能的重复项:javascript中的独立括号,javascript,Javascript,可能的重复项: 我在javascript中看到了以下格式的一些代码: ( function() { //stmt } )(); 为什么我们要使用这些独立的括号?谢谢。此代码创建一个函数表达式,然后立即调用它 这和 var unnamed = function() { ... }; (unnamed) (); 独立括号()意味着执行函数,在这段代码中,它是一个匿名函数。在之前的最后两个parantises直接执行匿名函数。另外两个偏执是可选的,只是某种约定 此模式通常用于不
我在javascript中看到了以下格式的一些代码:
(
function()
{
//stmt
}
)();
为什么我们要使用这些独立的括号?谢谢。此代码创建一个函数表达式,然后立即调用它 这和
var unnamed = function() { ... };
(unnamed) ();
独立括号
()
意味着执行函数,在这段代码中,它是一个匿名函数。在之前的最后两个parantises代码>直接执行匿名函数。另外两个偏执是可选的,只是某种约定
此模式通常用于不污染全局命名空间:
(function() {
var a = 42;
})();
alert(a); // a is undefined
Paul Irish对此和其他javascript模式有一个非常好的屏幕演示:这是javascript中所谓的模块模式的基础。有关更多信息,请参阅以下文章:
本质上,正如文章所述,此模式非常适合维护隐私和状态,但也允许Javascript模块的松散耦合和链接。创建注释性函数并调用它,因此避免了对只调用一次的函数的名称空间和内存的污染
尽管类似于:
var f = function () { ... };
f();
此变量可避免创建变量f,从而节省内存并避免名称空间冲突。OP中的示例不是模块模式,而是一个立即执行的简单匿名函数表达式。只有当模块模式实际创建了一个对象,并且该对象的方法可以在匿名函数之外访问时,它才是模块模式——通常通过返回所述对象来完成,尽管还有其他方法。但是还有其他非模块的原因,为什么您可以将一些代码包装到一个匿名立即执行的函数中,例如,为一个特定的计算创建一些临时工作变量,而不污染全局名称空间。我仍然喜欢这些资源。他们很好。@nnnnnn:同意,这不是一种模式,而是一种模式的基础。我已经相应地编辑了我的文章。投票表决。