为什么function(){}不起作用,但是(function(){})呢?(Chrome DevTools/Node)

Jus*_*cha 16 javascript

我现在已经看到了这种奇怪的行为,我无法定义

function(){} 
Run Code Online (Sandbox Code Playgroud)

要么

function(a){
   console.log(a)
}
Run Code Online (Sandbox Code Playgroud)

它抛出一个Uncaught SyntaxError.

但是test = function(){}或者(function(){})确实有效.

Safari开发工具有一个更好的错误报告:它说

SyntaxError:Function语句必须具有名称.

好吧,如果你永远不会使用它,那么定义一个类似的函数是没有意义的.但它仍然很奇怪.我想我已经在问题中提供了答案.

Mar*_*ulz 28

JavaScript具有函数声明函数表达式.前者不能立即调用,而后者可以.这是语言语法的问题.

功能声明:

function foo() {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

函数表达式(在右侧=):

var foo = function() {
    // ...
};
Run Code Online (Sandbox Code Playgroud)

通过在函数周围添加括号,您强制将函数解析为函数表达式,因为不可能在括号内放置函数声明(只有表达式是预期和接受的):

(function foo() {
    // ...
});
Run Code Online (Sandbox Code Playgroud)

然后,您可以立即调用它:

(function foo() {
    // ...
})();
Run Code Online (Sandbox Code Playgroud)

有关更详细的说明,请查看JavaScript中的函数定义.

  • 请注意,规范术语是*函数声明*."功能声明"确实意味着ES6之前的特殊功能. (2认同)

Mic*_*icz 9

括号(function(){})表示函数计算,对象现在包含在括号内,此评估返回函数.它可以被称为:(function(){})();.

function(){}没评价.导致错误是有道理的,因为如你所说,你将无法以任何方式使用它.