一尘不染

javascript功能领先!句法

javascript

我现在已经在一些库中看到了这种语法,我想知道这样做有什么好处。(请注意,我非常了解闭包以及代码在做什么,我只关心语法上的差异)

!function(){
  // do stuff
}();

作为更常见的替代

(function(){
  // do stuff
})();

自调用匿名功能。

我想知道几件事。首先,什么是最有效的例子?为了使该语句在语法上正确,为什么必须使用爆炸呢?有人告诉我这+行得通,而且我敢肯定还有其他地方可以代替!

第二,好处是什么?我只能说它保存了一个字符,但是我无法想象吸引如此多的采用者具有如此巨大的好处。我还有其他好处吗?

我可以看到的唯一其他区别是自调用函数的返回值,但是在这两个示例中,我们都不在乎函数的返回值,因为它仅用于创建闭包。那么有人可以告诉我为什么可能使用第一种语法吗?


阅读 275

收藏
2020-05-01

共1个答案

一尘不染

理想情况下,您应该能够简单地完成所有这些操作:

function(){
  // do stuff
}();

这意味着声明匿名函数并执行它。但这由于JS语法的特殊性而行不通。

因此,实现此目标的最短形式是使用某些表达式,例如UnaryExpression(以及CallExpression):

!function(){
  // do stuff
}();

还是为了好玩:

-function(){
  // do stuff
}();

要么:

+function(){
  // do stuff
}();

甚至:

~function(){
  // do stuff
  return 0;
}( );
2020-05-01