JavaScript即时函数调用-为什么函数周围需要括号?

JavaScript即时函数调用-为什么函数周围需要括号?,javascript,Javascript,为什么函数声明需要用括号括起来才能立即调用?我很好奇解释器在用括号括起来时如何读取立即调用的函数 即 为什么我必须这样做 (function() { // Logic })(); 而不是这个 function() { // Logic }(); 当一个函数被包装在括号中时,它被解析为一个表达式——一个函数表达式。否则,如果没有它们,它将被解析为函数声明。函数声明需要一个它认为您没有给出的名称,这反过来会导致语法错误。此外,不能将()内联应用于函数声明以调用它。空括号是

为什么函数声明需要用括号括起来才能立即调用?我很好奇解释器在用括号括起来时如何读取立即调用的函数

为什么我必须这样做

(function() { 
   // Logic 
 })();
而不是这个

function() { 
   // Logic 
 }();

当一个函数被包装在括号中时,它被解析为一个表达式——一个函数表达式。否则,如果没有它们,它将被解析为函数声明。函数声明需要一个它认为您没有给出的名称,这反过来会导致语法错误。此外,不能将
()
内联应用于函数声明以调用它。空括号是一个语法错误,但非空括号是一个将与函数分开计算的表达式。

当函数被包装在括号中时,它被解析为表达式-函数表达式。否则,如果没有它们,它将被解析为函数声明。函数声明需要一个它认为您没有给出的名称,这反过来会导致语法错误。此外,不能将
()
内联应用于函数声明以调用它。空括号是语法错误,但非空括号是将与函数分开计算的表达式。

function foo(){}(bar)
虽然有效,但它并没有达到人们的目的。非常好的答案,非常有意义,谢谢。@FelixKling,你的例子会做什么?@contactmatt:它会定义一个函数
foo
,然后计算括号内的表达式。在
(bar)
中,括号是分组运算符(如
(5+3)*2
),它们不调用括号。
函数foo(){}(bar)
虽然有效,但它并没有达到人们的目的。非常好的答案,非常有意义,谢谢。@FelixKling,你的例子会做什么?@contactmatt:它会定义一个函数
foo
,然后计算括号内的表达式。在
(bar)
中,括号是分组运算符(如
(5+3)*2
),它们不调用括号。在允许表达式的情况下,第二个是OK的,例如
var x=function(){return'foo'}()第二个是允许表达式的OK,例如
var x=function(){return'foo'}()