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

Why function statement requires a name?

本文关键字:一个 函数 语句 为什么      更新时间:2023-09-26

为什么我可以写

 var foo = function(){}();

But can not

 function(){}();

是否有设计上的原因?

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

第二个例子是声明:一旦关闭"}"被击中,声明就结束了。父元素本身的没有意义——它们必须包含一个表达式。后面的")"是错误的

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

(function() {})();  // Or...
(function() {}());

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

参见什么时候使用括号,什么时候不用?

您可以(function(){})();,并且您没有在:var foo = function(){}();中命名函数

您将foo设置为函数的返回值,在您的情况下是undefined,因为所有函数在JavaScript中返回一些东西。

第一次使用函数

var foo = function(){}()

位于表达式位置,而不是语句位置。另一方面,第二个语句位于顶层,作为函数语句。也就是说,'function'可以在两种不同的上下文中使用,它的意思也可能有细微的不同。

如果你想创建没有名字的匿名函数,你可以用函数表达式来实现。而且,由于JavaScript语言语法的工作方式,在某些上下文中需要父元素,正如Dave Newton所提到的,因为你放置单词"function"的地方可能会与它的语句版本混淆(这确实需要一个名称)。