JavaScript的 !function(){}

JavaScript !function(){}

本问题已经有最佳答案,请猛点这里访问。

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

1
2
3
!function(a){//...

  }(window)

为什么开头有感叹号?

我以为!not的接线员。

谢谢您。

编辑:

完整的代码。


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

使用一元运算符调用IIFE是常见的做法。这是一个常见的缩写:

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

或:

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

还可以用任何其他一元运算符替换非一元运算符:

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


对函数调用给出了很好的解释https://github.com/airbnb/javascript/issues/44问题注释-13063933

1
!function () {}();

等于

1
(function(){})();

但作者正在保存1字节的代码。

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

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

与此相同:

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

注意最后一位的";"。这是防御性的,因为它可以保护您的代码免受失控的JS的攻击。

有趣的是,我之前也问过这个问题:

遇到了一个我从未见过的会议。它做什么?函数!

很好的参考资料:感叹号在函数之前做什么?