理解自调用函数语句之间的区别

时间:2015-12-14 20:22:33

标签: javascript self-invoking-function

请解释,为什么这句话

function f(){}()

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

(function f(){}())

没有

1 个答案:

答案 0 :(得分:0)

解析器将前者解释为function declaration,将后者解释为function expression

为什么呢?要理解我们需要查看ECMA-262第3版的第11.1.6和12.4节。第12.4节声明“ExpressionStatement不能以函数关键字开头,因为这可能使它与FunctionDeclaration不一致。”这告诉我们function f(){}()必须是函数声明,而()是无效的语法。这个陈述是表达式的原因是因为第11.1.6节(也就是括号)中的分组运算符强制将此函数视为表达式。