Javascript 什么';这就是函数(){}()和之间的区别!函数(){}()

Javascript 什么';这就是函数(){}()和之间的区别!函数(){}(),javascript,jquery,twitter-bootstrap,Javascript,Jquery,Twitter Bootstrap,可能重复: 所以我刚刚从Twitter上阅读了新引导程序(2.0)的源代码,注意到在自动调用匿名函数之前有一个感叹号。当我看到这一幕时,我立刻想到“哦,糟了,有一种新的更好的方法吗?” 你自己看看吧 不管怎样,有什么区别?这肯定是有原因的,因为他们在所有JavaScript插件(用于引导)中都一致使用它 我注意到的另一件事是在这之后的“严格使用”。我不认为这与我之前的调查有关,但有人能解释一下吗 谢谢 function(){} (); 就其本身而言(见Point的评论)是无效

可能重复:

所以我刚刚从Twitter上阅读了新引导程序(2.0)的源代码,注意到在自动调用匿名函数之前有一个感叹号。当我看到这一幕时,我立刻想到“哦,糟了,有一种新的更好的方法吗?”

你自己看看吧

不管怎样,有什么区别?这肯定是有原因的,因为他们在所有JavaScript插件(用于引导)中都一致使用它

我注意到的另一件事是在这之后的“严格使用”。我不认为这与我之前的调查有关,但有人能解释一下吗

谢谢

function(){} ();
就其本身而言(见Point的评论)是无效的,因为

function() {}
是一个函数声明。要立即调用它,需要让JavaScript引擎将函数视为表达式。人们通常以两种方式之一来做这件事

(function(){}) ();  //more common

(function(){} ()); // Papa Crockford's preference:

仅仅是同一事物的简写版本

如果您有两个脚本:

script1.js

(function(){

})()
(function(){

})()
script2.js

(function(){

})()
(function(){

})()
将它们连接在一起,可以得到:

(function(){

})()
(function(){

})()
这会导致错误,而:

!function(){

}()
!function(){

}()
没有。第12.4节说:

表达式语句无法启动 使用
函数
关键字,因为 可能会用一个 功能声明


因此,如果您想要一个执行匿名函数的表达式语句,就必须绕过这个限制。添加
(它只是否定函数的结果)向解释器清楚地表明,这不是函数声明,避免了这种歧义。

+1尽管后面不是必需的,但根据Doughlas Crackford的说法,这是一个很好的实践:)@gdoron-我现在被限制了。最好回去工作:)第一个是无效的,如果这是所有的,但如果(例如)在它之前有类似
x=
的东西,那么它就可以了。谢谢!我还发现这篇文章是由为Bootstrap编写Javascript的家伙写的。@Johnny-这是一篇很棒的文章,我必须保存它。虽然我不认为我是一个足够好的开发者,可以不使用分号。你必须彻底了解语言,才能知道它什么时候起作用,什么时候起作用。这也是一些脚本在开始时使用分号的原因:
;(function(){}())
那么,可以安全地说
;(function(){}())
!function(){}()
也有同样的作用吗?分号就在这行的末尾。如果你不省略它,那么它就不会引起问题。它的用途与
不同!函数(){}()