为什么在JavaScript中这种函数调用方式是错误的?

6

我希望创建一个匿名函数并立即调用它。

1)这将导致语法错误。为什么?

1)这会产生语法错误,为什么呢?

function ()
{
    alert("hello");
}();

2) 在函数定义周围加上 () 就可以了。

(function ()
{
    alert("hello");
})();

3) 或者,将匿名函数分配给一个变量。它可以工作。

var dummy = function()
{
    alert("hello");
}();

为什么第一种方法不起作用?

所以显然这不是语法错误? - karim79
正如某人所说,这是一个语法错误。 - olliej
1个回答

13

ECMAScript语言规范第12.4节中指出:

ExpressionStatement不能以function关键字开头,因为这可能会与FunctionDeclaration产生歧义。

所以你的第一种情况是不允许的,因为它可能导致语言上的歧义。其他情况是不同类型的语句(而不是ExpressionStatement),在那里使用这个结构是允许的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接