如果没有大括号,请进入
if (true) { let x = 5 }
按预期工作(没有语法错误),但是
if (true) let x = 5
throws SyntaxError: Unexpected strict mode reserved word
节点4.1.0和babel中SyntaxError: Unexpected strict mode reserved word
这是预期的行为? 我知道这是一个愚蠢的例子。 我只是想知道这是一个错误或没有。
是的,这是预期的行为。 if
语句的生成规则是
if ( Expression[In, ?Yield] ) Statement[?Yield, ?Return]
但是let
声明不是一个Statement
,因此不允许在这个位置:
Statement[Yield, Return] : BlockStatement[?Yield, ?Return] VariableStatement[?Yield] EmptyStatement ExpressionStatement[?Yield] IfStatement[?Yield, ?Return] BreakableStatement[?Yield, ?Return] ContinueStatement[?Yield] BreakStatement[?Yield] [+Return] ReturnStatement[?Yield] WithStatement[?Yield, ?Return] LabelledStatement[?Yield, ?Return] ThrowStatement[?Yield] TryStatement[?Yield, ?Return] DebuggerStatement Declaration[Yield] : HoistableDeclaration[?Yield] ClassDeclaration[?Yield] LexicalDeclaration[In, ?Yield] LexicalDeclaration[In, Yield] : LetOrConst BindingList[?In, ?Yield] ;