如果没有大括号,请进入

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] ;