【问题标题】:What does "!function () {}" mean/do in javascript? [duplicate]“!function(){}”在javascript中是什么意思/做什么? [复制]
【发布时间】:2012-08-31 10:35:25
【问题描述】:

可能重复:
What does the exclamation mark do before the function?
! preceding function in javascript?
javascript function leading bang ! syntax

我最近在 javascript 中看到了这种模式:

!function () {
    // do something
}()

function 关键字前面的 bang 应该做什么?我似乎在 intertubez 上找不到任何关于它的信息。

【问题讨论】:

  • 是的,上面所有三个“可能的重复项”都回答了这个问题。谢谢

标签: javascript


【解决方案1】:
function () {
    // do something
}();

这是一个立即调用的函数声明。不能立即调用函数声明;这是一个语法错误。

为了解决这个语法错误,大多数人将 IIFD 括在括号中以强制它成为一个表达式 (IIFE)。

(function () {
    // do something
})();

在这种情况下,他们添加了一个感叹号。

【讨论】:

  • 确实,我认为这(以这种方式使用!)表明开发人员非常懒惰,以至于他们决定少输入一个字符值得额外的时钟周期来处理多余的否定和与共同约定的背离。 :-)
  • @Pete:一点也不。我一直这样做,并不是因为我懒惰。 它在网络上节省了一个字节。 特别是对于移动设备,最小化文件大小非常重要。当然,它只是一个字节,但字节加起来可以提高整体页面性能并降低带宽费用。多余的否定是 complete bunk! 并不像你想象的那样罕见。
  • @josh3736 我可以购买带宽账单的说法,但一些开发人员夸大了“必须为移动设备保存每个字节!”争论。您必须记住,移动设备也是超能力不足的计算机。你更有可能在高带宽连接上找到一个 CPU 粗糙的人,而不是相反。保存请求是一回事(移动设备上的延迟很糟糕),但保存字节却很难卖。我认为节省几个 CPU 周期肯定值得在任何一种情况下发生的请求上多传输一个字节。
  • 我刚刚在几个移动浏览器上运行了the performance test:Safari iPhone 和 iPad、Android 股票浏览器和 Chrome Mobile、Opera Mobile、Firefox Mobile 和 IE 9 Mobile (WP 7.5)。 Android 浏览器和 Firefox 的差异,其余的差异小于 ±5%。 (奇怪的是,! 在 iPhone 上的表现更好。)无论如何,你仍然在谈论每秒获得几十万次操作的东西,实际上你只会有几个操作在脚本的整个生命周期内。在移动设备上,平衡执行速度与带宽,节省字节数胜
猜你喜欢
  • 1970-01-01
  • 2012-03-05
  • 1970-01-01
  • 2012-07-04
  • 2016-02-14
  • 2015-07-15
  • 2018-07-17
  • 2013-08-25
相关资源
最近更新 更多