小编典典

javascript函数领先砰!句法

all

我现在已经在一些库上看到了这种语法,我想知道它有什么好处。(注意我很清楚闭包和代码在做什么,我只关心语法差异)

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

作为更常见的替代品

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

用于自调用匿名函数。

我想知道几件事。首先,是什么让顶级示例真正起作用?为什么要使这个语句在语法上正确,爆炸是必要的?我也被告知这+行得通,而且我相信还有一些其他的,代替!

第二,有什么好处?我只能说它节省了一个角色,但我无法想象吸引众多采用者的巨大好处。我还缺少其他一些好处吗?

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


阅读 34

收藏
2022-06-23

共1个答案

小编典典

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

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

这意味着声明匿名函数并执行它。但是由于 JS 语法的特殊性,这不起作用。

所以实现这一点的最短形式是使用一些表达式,例如 UnaryExpression(以及 CallExpression):

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

或者为了好玩:

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

或者:

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

甚至:

~function(){
  // do stuff
  return 0;
}( );
2022-06-23