根据ecmascript,函数声明不能在if语句内部



如何在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实现都允许它们。

最新更新