Javascript 自调用函数的替代语法?

Javascript 自调用函数的替代语法?,javascript,function,Javascript,Function,在为一些同事编写javascript课程时,我意外地发现了一种用于自调用函数的替代语法。有没有人知道这件事,有没有一些细节?我找不到关于它的文档 代码: 经典语法 (function(){ console.log("I'm self-invoked!"); })(); 交替语法 (function(){ console.log("Me too!"); }()); 谢谢你的提示 这两个词的意思相同 在这两种情况下,开始处的(表示开始。这表

在为一些同事编写javascript课程时,我意外地发现了一种用于自调用函数的替代语法。有没有人知道这件事,有没有一些细节?我找不到关于它的文档

代码: 经典语法

    (function(){
      console.log("I'm self-invoked!");
    })();
交替语法

    (function(){
      console.log("Me too!");
    }());

谢谢你的提示

这两个词的意思相同

在这两种情况下,开始处的
表示开始。这表示我们打算调用的开始。最后我们调用它。区别很微妙,根本不重要,让我们来探讨一下:

(function(){
  console.log("I'm self-invoked!");
})();
这里,
是告诉编译器它是表达式的开始,编译器计算表达式(在本例中是函数表达式),然后调用它(在表达式之外)


这里-调用模式(
()
)就是该表达式的一部分。

它的工作方式完全相同;括号仅用于防止将其解析为语句(一元运算符也可以工作)。你不懂什么?@SLaks你不懂…括号使它成为一个急切的执行,而不是解析。解析是在编译时完成的,而不是在执行时完成的。@palisudarshanterho:不;括号除了影响解析树的形状外,永远不会影响执行。括号是防止语法错误将其解析为s陈述。这是更好的解释。我关于渴望执行的意思是,这个设置
x
立即将其设置为值,而不是稍后将其设置为函数;
让x=(function(){return 123})(
谢谢,现在已经很清楚了。@jonBreizh不客气,我制作了这个答案社区wiki,以便其他用户可以编辑它并添加更多信息(因为这个问题也很基本。)如果你想补充一点,欢迎加入。
(function(){
  console.log("Me too!");
}());