请解释,为什么这句话
function f(){}()
抛出异常,但在括号内完全相同
(function f(){}())
没有
答案 0 :(得分:0)
解析器将前者解释为function declaration,将后者解释为function expression。
为什么呢?要理解我们需要查看ECMA-262第3版的第11.1.6和12.4节。第12.4节声明“ExpressionStatement不能以函数关键字开头,因为这可能使它与FunctionDeclaration不一致。”这告诉我们function f(){}()
必须是函数声明,而()
是无效的语法。这个陈述是表达式的原因是因为第11.1.6节(也就是括号)中的分组运算符强制将此函数视为表达式。