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搜索... :)
谢谢!
在您的第一个示例中,为了避免全局命名空间混乱,人们将其代码包含在匿名函数中以查找范围。奇怪的括号语法用于一步完成函数的定义和执行;最后的
所以在匿名函数中你可以定义
你的第二个例子只是一个名为
定义了一个匿名函数
1 2 | function() { } |
然后立即打电话
1 | () |
封闭该函数的extra()强制解释器将该函数视为表达式。 Javascript将任何以function关键字开头的语句视为声明,因此无法立即调用它。
目的是避免污染全局命名空间。函数中定义的所有变量都是函数的局部变量。
谷歌的模块模式。
我搜索了"javascript包装功能",第一个命中就是这个,它说:
1 | This method doesn't add any new symbols to the global or LIB spaces. |
我不明白问题的第二部分:
缩回以回答:在"(function(){...})()"这样的匿名函数中包装整个Javascript文件的目的是什么?
第一个称为立即功能。您可以在此处阅读有关此功能模式的更多信息