如何在IfStatement中声明函数?因为根据ecmascript规范,只有语句可以存在。
if(表达式(语句
if(表达式(语句else语句
和FunctionDeclaration不是语句,但它是声明
所以,也许我错过了一些东西,也许浏览器现在无法实现这样的东西,因为它可能会破坏那些在if语句中使用函数声明的网站。
不可能在if
语句中放入函数声明。尝试
if (true) function example() {}
在严格模式下,您将获得SyntaxError
。要在条件分支中声明函数,必须将其放入块中,该块是语句(通过BlockStatement(,并且可以包含声明s(在StatementList内(。
也许浏览器现在无法实现这样的功能,因为它可能会破坏在if语句中使用函数声明的网站。
确实如此。对于web遗留兼容性,允许在草率模式下使用if
语句中的函数声明。不要这样写代码,但浏览器可以将其视为有效代码。
来自规范:
在函数或脚本的顶层,内部函数声明被视为var声明。
链条是这样的。
语句=>阻止语句=>StatementList=>StatementListItem=>声明=>VarDeclaration
这里没问题,报表列表项
https://tc39.es/ecma262/#prod-StatementListItem
在ECMAScript2015之前,ECMAScript规范没有将FunctionDeclaration的出现定义为Block语句StatementList的元素。然而,对这种形式的FunctionDeclaration的支持是允许的扩展,并且大多数浏览器托管的ECMAScript实现都允许它们。