What does “!function () {}” mean/do in javascript?
Possible Duplicate:
What does the exclamation mark do before the function?
! preceding function in javascript?
javascript function leading bang ! syntax
我最近在javascript中看到了这种模式:
1 2 3
| !function () {
// do something
}() |
什么是function关键字前面的爆炸应该做什么? 我似乎无法在intertubez上找到任何关于它的信息。
-
是的,上面所有三个"可能的重复"都回答了这一点。 谢谢
1 2 3
| function () {
// do something
}(); |
这是一个立即调用的函数声明。 无法立即调用函数声明; 这是一个语法错误。
为了解决这种语法错误,大多数人将IIFD包含在parens中以迫使它成为表达式(IIFE)。
1 2 3
| (function () {
// do something
})(); |
在这种情况下,他们添加了感叹号。
-
实际上,我看到这个(以这种方式使用!)作为开发人员如此懒惰的标志,他们决定输入少一个字符值得额外的时钟周期来处理多余的否定和与普通约定的分歧。 :-)
-
@Pete:完全没有。我一直这样做,而不是因为我很懒。它在线上节省了一个字节。特别是对于移动设备,最小化文件大小非常重要。当然,它只是一个字节,但字节加起来更好的整体页面性能和更低的带宽费用。多余的否定事情是完全无聊的,!并不像你想象的那样罕见。
-
@ josh3736我可以购买带宽账单参数,但是一些开发人员可以过度使用"必须为移动设备保存每个字节!"论点。你必须记住,移动设备也是超级动力不足的计算机。你更有可能在高带宽连接上找到一个比较粗糙的CPU而不是相反的人。保存请求是一回事(移动设备上的延迟很糟糕),但节省字节是一个艰难的卖点。我认为节省一些CPU周期肯定值得在一个请求的额外字节传输,无论哪种方式发生。
-
我刚刚在几个移动浏览器上运行了性能测试:Safari iPhone和iPad,Android股票浏览器和Chrome Mobile,Opera Mobile,Firefox Mobile和IE 9 Mobile(WP 7.5)。 Android浏览器和Firefox的差异为零,其余的差异小于#177; 5%。 (奇怪的是,!在iPhone上表现得更好。)无论如何,你仍然在谈论几十万次操作/秒的事情,而且实际上你只会在脚本的生命周期内进行一些操作。在移动设备上,平衡执行速度与带宽,节省字节。