Why function statement requires a name?
为什么我可以写
1 | var foo = function(){}(); |
但不能
1 | function(){}(); |
有任何设计原因吗?
第一个例子是赋值:右侧是表达式,匿名函数的立即执行是有意义的。
第二个例子是一个声明:一旦结束
必须将独立声明转换为表达式:
1 2 | (function() {})(); // Or... (function() {}()); |
第一个使声明成为表达式,然后执行结果。第二个将声明和执行转换为表达式。
另请参见何时使用括号,何时不使用括号?
您可以
您将
第一次使用功能
1 | var foo = function(){}() |
处于表达位置,而不是陈述位置。另一方面,第二个位于顶层,作为函数声明。也就是说,'function'可以在两个不同的上下文中使用,它可能意味着微妙的不同。
如果要创建没有名称的匿名函数,可以使用函数表达式。而且,正如JavaScript语言语法的工作原理一样,你需要在某些语境中使用parens,正如Dave Newton所提到的那样,因为你将"function"这个词放在哪里可以与它的语句版本混淆(这确实需要一个名字)。