我想创建一个匿名函数,然后立即调用它。
1)这会带来语法错误。为什么?
function ()
{
alert("hello");
}();
2)用 () 包装函数定义,它可以工作。
(function ()
{
alert("hello");
})();
3) 或者,将匿名函数分配给变量。有用。
var dummy = function()
{
alert("hello");
}();
为什么第一种方法不起作用?
我想创建一个匿名函数,然后立即调用它。
1)这会带来语法错误。为什么?
function ()
{
alert("hello");
}();
2)用 () 包装函数定义,它可以工作。
(function ()
{
alert("hello");
})();
3) 或者,将匿名函数分配给变量。有用。
var dummy = function()
{
alert("hello");
}();
为什么第一种方法不起作用?
ECMAScript 语言规范第12.4 节说:
ExpressionStatement不能以关键字开头,因为
function
这可能会使它与 FunctionDeclaration模棱两可。
所以你的案例 1 是不允许的,因为它可能会导致语言歧义。其他情况是不同类型的语句(不是ExpressionStatement s),这不是问题,因此允许构造。