为什么函数语句需要一个名字?

Sta*_*lin 21 javascript

为什么我可以写

 var foo = function(){}();
Run Code Online (Sandbox Code Playgroud)

但不能

 function(){}();
Run Code Online (Sandbox Code Playgroud)

有任何设计原因吗?

Dav*_*ton 36

第一个例子是赋值:右侧是表达式,匿名函数的立即执行是有意义的.

第二个例子是一个声明:一旦结束"}",声明就结束了.Parens本身没有意义 - 它们必须包含一个表达.尾随")"是一个错误.

必须将独立声明转换为表达式:

(function() {})();  // Or...
(function() {}());
Run Code Online (Sandbox Code Playgroud)

第一个使声明成为表达式,然后执行结果.第二个将声明和执行转换为表达式.

另请参见何时使用括号,何时不使用括号?


kem*_*002 7

您可以(function(){})();,而不是在命名函数:var foo = function(){}();

您正在设置foo函数的返回值,在您的情况下undefined,因为所有函数都返回JavaScript中的内容.