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