大家好,
我看过几个使用这种表示法的JavaScript文件:
启动JavaScript文件:
(function() {
// All functions go here.
// Can someone say what the wrapping nameless function is used for?
})();
同样使用原型库,这似乎是可能的:
function $() {
// Prototype $-wrapping function.
}
有人可以解释上面两个代码片段,它们的用途和它们的区别吗?一些关键字可以帮助我找到更多关于这种符号/技术(它是如何命名的)也会有所帮助,所以我可以对它进行谷歌搜索......:)
谢谢!
答案 0 :(得分:6)
在您的第一个示例中,为了避免全局命名空间混乱,人们将其代码包含在匿名函数中以查找范围。奇怪的括号语法用于一步完成函数的定义和执行;最后的()
具有执行函数本身的含义。
所以在匿名函数中你可以定义function apple(){}
,它只能在匿名函数中访问。如果您正在创建一个库并且只希望某些事情混乱您的全局命名空间,那么这很好。
你的第二个例子只是一个名为$
的简单函数。许多库喜欢使用这个名称,因为它简洁明了,而且每次你想引用库名称空间时都需要输入它,越短越好。
答案 1 :(得分:3)
我搜索了“javascript wrap function”,第一个点击是this,其中说:
This method doesn't add any new symbols to the global or LIB spaces.
我不明白问题的第二部分:function $() { ... }
不是“无名”功能:它的名称为$
!如果您喜欢名为$
的函数,那么这就是我所知道的最简单的方法。
答案 2 :(得分:3)
定义了匿名函数
function() {
}
然后立即调用
()
包含该函数的extra()强制解释器将该函数视为表达式。 Javascript将任何以function关键字开头的语句视为声明,因此无法立即调用它。
目的是避免污染全局命名空间。函数中定义的所有变量都是函数的局部变量。
Google for module pattern。
答案 3 :(得分:2)
答案 4 :(得分:1)
第一个被称为立即功能。您可以阅读有关此函数模式here的更多信息。