0

请解释一下,为什么会有这样的说法

function f(){}()

抛出异常,但括号内的内容完全相同

(function f(){}())

才不是

4

1 回答 1

0

解析器将前者解释为函数声明,而将后者解释为函数表达式

为什么?要了解我们需要查看 ECMA-262 第 3 版的第 11.1.6 和 12.4 节。第 12.4 节指出“ExpressionStatement 不能以 function 关键字开头,因为这可能使其与 FunctionDeclaration 产生歧义。” 这告诉我们function f(){}()必须是函数声明,并且()语法无效。该语句是表达式的原因是因为第 11.1.6 节中的分组运算符(又名括号)强制将此函数视为表达式。

于 2015-12-14T20:43:40.283 回答