JavaScript !function(){}



查看缩小的嘶嘶声代码时,我注意到它是这样开始的:

!function(a){//...
  }(window)

为什么一开始有感叹号?

我认为!not运算符。

谢谢。

编辑:

完整代码

!function(a){/* ... */}();

使用一名单位操作员调用IIFE是常见的做法。这是一个常见的速记:

(function(a){/* ... */}());

或:

(function(a){/* ... */})();

您也可以用任何其他一单位运算符代替非单层操作员:

-function(a){ /* ... */ }();
+function(a){ /* ... */ }();
/* ... etc. */

给出了一个很好的解释功能调用https://github.com/airbnb/javascript/issues/44#issuecomment-13063933

!function () {}();

等于

(function(){})();

除非作者保存1个字节。

在许多情况下,这是关于保存字节的。

!function aaa(){}()
!function bbb(){}();

与此相同:

!function aaa(){}()
;(function bbb(){})();

注意";"在最后一点。这是防御性的,因为它可以保护您的代码免受可能先于它的失控JS的侵害。

有趣的是,我不久前问了同样的问题:

遇到了我从未见过的惯例。它有什么作用?!功能

上面有很好的参考:感叹号在功能之前做什么?

最新更新