JavaScript表示法:(function(){...})();

时间:2011-03-10 08:41:44

标签: javascript prototypejs

  

可能重复:
  What is the purpose of wrapping whole Javascript files in anonymous functions like “(function(){ … })()”?

大家好,

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

启动JavaScript文件:

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

同样使用原型库,这似乎是可能的:

function $() {
 // Prototype $-wrapping function.
}

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

谢谢!

5 个答案:

答案 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的更多信息。