function(){}()和!function(){}()之间有什么区别?

Joh*_*nny 6 javascript jquery twitter-bootstrap

可能重复:
!function(){}()vs(function(){})()

所以我只是通过Twitter阅读新的Bootstrap(2.0)的来源,并注意到在自动调用匿名函数之前有一个感叹号.当我看到这个时,我立刻想到"哦,废话,有一个新的,更好的方法来做到这一点?".

你自己看!

无论如何,有什么区别?必须有一个原因,因为他们在所有JavaScript插件中一致地使用它(对于Bootstrap).

我注意到的另一件事是在此之后"使用严格".我不认为这与我之前的调查有关,但任何人都可以解释一下吗?

谢谢!

Ada*_*kis 14

function(){} ();
Run Code Online (Sandbox Code Playgroud)

就其本身而言(参照点的评论)是不会有效的,因为

function() {}
Run Code Online (Sandbox Code Playgroud)

是一个函数声明.要立即调用它,您需要让JavaScript引擎将该函数视为表达式.人们通常这样做

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

(function(){} ()); // Papa Crockford's preference:
Run Code Online (Sandbox Code Playgroud)

!function(){}();
Run Code Online (Sandbox Code Playgroud)

简单地说是同一件事的速记版本.

  • +1.你着火了! (2认同)

Esa*_*ija 8

如果你有2个脚本:

script1.js:

(function(){

})()
Run Code Online (Sandbox Code Playgroud)

script2.js:

(function(){

})()
Run Code Online (Sandbox Code Playgroud)

你连接它们,你得到:

(function(){

})()
(function(){

})()
Run Code Online (Sandbox Code Playgroud)

这会导致错误,而:

!function(){

}()
!function(){

}()
Run Code Online (Sandbox Code Playgroud)

不.