查看缩小的嘶嘶声代码时,我注意到它是这样开始的:
!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的侵害。
有趣的是,我不久前问了同样的问题:
遇到了我从未见过的惯例。它有什么作用?!功能
上面有很好的参考:感叹号在功能之前做什么?