Possible Duplicate:
What does the exclamation mark do before the function?
我长期以来一直在 JavaScript 中使用以下代码来实现自执行的匿名函数:
(function () { /* magic happens */ })()
最近,我开始看到更多以下模式的实例(例如,在 Bootstrap 中):
!function () { /* presumably the same magic happens */ }()
有人知道第二种模式的优点是什么吗?或者,这只是一种风格偏好?
这两种不同的技术具有功能性 difference以及外观上的差异。一种技术相对于另一种技术的潜在优势将归因于这些差异。
简洁
Javascript 是一种简洁 非常重要的语言,因为 Javascript 在页面加载时下载。这意味着 Javascript 越简洁,下载时间越快。为此,有 Javascript minifiers和 obfuscators压缩 Javascript 文件以优化下载时间。例如,alert ( "Hi") ;
中的空格将被优化为 alert("Hi");
。
牢记这一点,比较这两种模式
这充其量只是一个微优化,所以我不认为这是一个特别有说服力的论点,除非你正在做 code golf。比赛。
取反返回值
比较a
和b
的结果值。
var a = (function(){})()
var b = !function(){}()
由于 a
函数不返回任何内容,因此 a
将是 undefined
。由于 undefined
的否定是 true
,b
将计算为 true
。这对于那些想要否定函数的返回值或拥有一切都必须返回非空值或未定义值迷信的人来说是一个优势。您可以在 other Stack Overflow question. 上查看其工作原理的解释。
我希望这能帮助您理解这个通常被视为 anti-pattern 的函数声明背后的基本原理。 .