Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
请解释一下,为什么会有这样的说法
function f(){}()
抛出异常,但括号内的内容完全相同
(function f(){}())
才不是
解析器将前者解释为函数声明,而将后者解释为函数表达式。
为什么?要了解我们需要查看 ECMA-262 第 3 版的第 11.1.6 和 12.4 节。第 12.4 节指出“ExpressionStatement 不能以 function 关键字开头,因为这可能使其与 FunctionDeclaration 产生歧义。” 这告诉我们function f(){}()必须是函数声明,并且()语法无效。该语句是表达式的原因是因为第 11.1.6 节中的分组运算符(又名括号)强制将此函数视为表达式。
()