JavaScript!function(){}

Pro*_*ogo 4 javascript function sizzle

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

!function(a){//...

  }(window)
Run Code Online (Sandbox Code Playgroud)

为什么一开始就有感叹号?

我以为那!not运营商.

谢谢.

编辑:

完整代码.

xan*_*ded 6

!function(a){/* ... */}();
Run Code Online (Sandbox Code Playgroud)

使用一元运算符来调用IIFE是常见的做法.这是一个常见的简写:

(function(a){/* ... */}());
Run Code Online (Sandbox Code Playgroud)

要么:

(function(a){/* ... */})();
Run Code Online (Sandbox Code Playgroud)

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

-function(a){ /* ... */ }();
+function(a){ /* ... */ }();
/* ... etc. */
Run Code Online (Sandbox Code Playgroud)

  • 请注意`!`不会*调用*函数.它的目的是使解析器将函数定义视为表达式而不是语句. (7认同)
  • @JohannesH.:在旧的IE版本中它(它是一个bug).规范规定函数*表达式*的名称仅在函数本身中可见.它非常适合调试和递归功能. (3认同)