是的,这是预期的行为。语句的生产规则
if是
if ( expression[In, ?Yield] ) Statement[?Yield, ?Return]
但
let声明不是a
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] DebuggerStatementDeclaration[Yield] : HoistableDeclaration[?Yield] ClassDeclaration[?Yield] LexicalDeclaration[In, ?Yield]LexicalDeclaration[In, Yield] : LetOrConst BindingList[?In, ?Yield] ;



