JavaScript表示法:(函数(){…})();

JavaScript表示法:(函数(){…})();,javascript,prototypejs,Javascript,Prototypejs,可能重复: 大家好, 我见过几个使用这种符号的JavaScript文件: JavaScript文件的开始: (function() { // All functions go here. // Can someone say what the wrapping nameless function is used for? })(); 同样对于原型库,这似乎是可能的: function $() { // Prototype $-wrapping function. } 有人能解释一下

可能重复:

大家好,

我见过几个使用这种符号的JavaScript文件:

JavaScript文件的开始:

(function() {
 // All functions go here. 
 // Can someone say what the wrapping nameless function is used for?
})();
同样对于原型库,这似乎是可能的:

function $() {
 // Prototype $-wrapping function.
}
有人能解释一下以上两段代码,它们的用途和区别吗?一些关键字可以帮助我找到更多关于这个符号/技术的信息(它是如何命名的)也会很有帮助,这样我就可以在上面运行谷歌搜索了……:)


谢谢

在您的第一个示例中,出于作用域的原因,人们将其代码包围在匿名函数中,以避免全局命名空间混乱。奇怪的括号语法用于一步定义和执行函数;末尾的
()
具有执行函数本身的含义

因此,在匿名函数中,您可以定义
函数apple(){}
,并且它只能在匿名函数中访问。如果您正在创建一个库,并且只希望某些东西扰乱您的全局名称空间,那么这是很好的

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

我搜索了“javascript包装函数”,第一个结果是,它说:

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

我不明白问题的第二部分:
函数$(){…}
不是一个“无名”函数:它的名字是
$
!如果您喜欢名为
$
的函数,这是我所知道的最简单的方法。定义了一个注释性函数

function() {
}
然后马上打电话

()
包含函数的额外()命令是强制解释器将函数视为表达式。Javascript将任何以function关键字开头的语句视为声明,因此不能立即调用它

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


谷歌搜索模块模式。

撤回,支持回答:

第一个称为立即函数。你可以阅读更多关于这个函数模式的内容。

忽略了它确实不是一个无名函数,我的坏:)在我的问题中编辑。可能是上面的一个副本,我相信这是一个比下面任何一个更好的解释。这个还包含有趣的信息,谢谢Gumbo。我还将在另一个线程中阅读答案!在发布这篇文章之前,我进行了一次搜索,但不确定用什么作为关键字来查找类似的问题:您可能会发现@Sander:请让我知道这个问题是否仍然相关,以便我可以在不再相关时将其作为副本关闭。