我现在已经在一些库上看到了这种语法,我想知道它有什么好处。(注意我很清楚闭包和代码在做什么,我只关心语法差异)
!function(){ // do stuff }();
作为更常见的替代品
(function(){ // do stuff })();
用于自调用匿名函数。
我想知道几件事。首先,是什么让顶级示例真正起作用?为什么要使这个语句在语法上正确,爆炸是必要的?我也被告知这+行得通,而且我相信还有一些其他的,代替!
+
!
第二,有什么好处?我只能说它节省了一个角色,但我无法想象吸引众多采用者的巨大好处。我还缺少其他一些好处吗?
我能看到的唯一其他区别是自调用函数的返回值,但是在这两个示例中,我们并不真正关心函数的返回值,因为它仅用于创建闭包。那么有人可以告诉我为什么可以使用第一种语法吗?
理想情况下,您应该能够简单地执行所有这些操作:
function(){ // do stuff }();
这意味着声明匿名函数并执行它。但是由于 JS 语法的特殊性,这不起作用。
所以实现这一点的最短形式是使用一些表达式,例如 UnaryExpression(以及 CallExpression):
或者为了好玩:
-function(){ // do stuff }();
或者:
+function(){ // do stuff }();
甚至:
~function(){ // do stuff return 0; }( );