5

我想创建一个匿名函数,然后立即调用它。

1)这会带来语法错误。为什么?

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

2)用 () 包装函数定义,它可以工作。

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

3) 或者,将匿名函数分配给变量。有用。

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

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

4

1 回答 1

12

ECMAScript 语言规范第12.4 节说:

ExpressionStatement不能以关键字开头,因为function这可能会使它与 FunctionDeclaration模棱两可。

所以你的案例 1 是不允许的,因为它可能会导致语言歧义。其他情况是不同类型的语句(不是ExpressionStatement s),这不是问题,因此允许构造。

于 2009-03-22T07:26:42.133 回答