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

Why does function(){} not work, but (function(){}) does? (Chrome DevTools/Node)

本问题已经有最佳答案,请猛点这里访问。

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

1
function(){}

要么

1
2
3
function(a){
   console.log(a)
}

它抛出Uncaught SyntaxError

test = function(){}(function(){})确实有效。

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

SyntaxError: Function statements must have a name.

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


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

功能声明:

1
2
3
function foo() {
    // ...
}

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

1
2
3
var foo = function() {
    // ...
};

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

1
2
3
(function foo() {
    // ...
});

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

1
2
3
(function foo() {
    // ...
})();

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


(function(){})中的括号表示函数计算,对象现在包含在括号内,此评估返回函数。它可以被调用,如下所示:(function(){})();

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