【发布时间】:2021-11-09 01:31:34
【问题描述】:
怎么可能在 IfStatement 中声明一个函数?因为根据 ecmascript 规范,只有 Statement 可以在那里。
if ( 表达式 ) 语句
if ( 表达式 ) 语句 else 语句
而FunctionDeclaration 不是声明,而是Declaration
所以也许我错过了一些东西,或者浏览器现在无法实现这样的东西,因为它可能会破坏在 if 语句中使用函数声明的网站。
【问题讨论】:
-
规范的一般编写方式令人困惑。您的困惑来自哪里是可以理解的。请查看规范语法摘要中的list of Statements。在那里你会发现所有被认为是陈述的东西,所以它们更容易思考。在名为 Hoistable Declarations 的 Statement 类别下 - 事实上,您会发现 FunctionDeclaration 在声明的事物列表中。希望这会有所帮助。
-
@RandyCasburn A FunctionDeclaration 可能会列在规范的语句部分,但这并不意味着有一个产品可以使它成为 Statement i>.
-
@Bergi - 你可以对一个表达式说同样的话(并不意味着有一个产生式将一个表达式变成一个语句)
-
@RandyCasburn 好吧,ExpressionStatement production 就是这样做的(没有分号)。函数声明没有这样的产生式。 FunctionDeclaration 不是 Statement。
-
@RandyCasburn 但表达式是语句,因为语句可以是表达式语句,而表达式语句可以是表达式。
标签: javascript ecmascript-6 ecma262