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'}()代码>