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