关于prototypejs:JavaScript表示法:(function(){…})();

JavaScript notation: (function() { … } )();

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
What is the purpose of wrapping whole Javascript files in anonymous functions like"(function(){ … })()"?

大家好,

我看过几个使用这种表示法的JavaScript文件:

JavaScript文件的开头:

1
2
3
4
(function() {
 // All functions go here.
 // Can someone say what the wrapping nameless function is used for?
})();

还有原型库,这似乎是可能的:

1
2
3
function $() {
 // Prototype $-wrapping function.
}

有人可以解释上面两个代码片段,它们的用途和它们的区别吗? 一些关键字可以帮助我找到更多关于这种符号/技术(如何命名)也会有帮助,所以我可以在它上面运行Google搜索... :)

谢谢!


在您的第一个示例中,为了避免全局命名空间混乱,人们将其代码包含在匿名函数中以查找范围。奇怪的括号语法用于一步完成函数的定义和执行;最后的()具有执行函数本身的含义。

所以在匿名函数中你可以定义function apple(){},它只能在匿名函数中访问。如果你正在创建一个库并且只想让某些东西混乱你的全局命名空间,这是很好的。

你的第二个例子只是一个名为$的简单函数。许多库喜欢使用这个名称,因为它简洁明了,而且每次要引用库名称空间时都需要输入它,越短越好。


定义了一个匿名函数

1
2
function() {
}

然后立即打电话

1
()

封闭该函数的extra()强制解释器将该函数视为表达式。 Javascript将任何以function关键字开头的语句视为声明,因此无法立即调用它。

目的是避免污染全局命名空间。函数中定义的所有变量都是函数的局部变量。

谷歌的模块模式。


我搜索了"javascript包装功能",第一个命中就是这个,它说:

1
This method doesn't add any new symbols to the global or LIB spaces.

我不明白问题的第二部分:function $() { ... }不是"无名"功能:它的名称为$!如果您喜欢名为$的函数,那么这是我所知道的最简单的方法。


缩回以回答:在"(function(){...})()"这样的匿名函数中包装整个Javascript文件的目的是什么?


第一个称为立即功能。您可以在此处阅读有关此功能模式的更多信息