如果没有大括号,请进来

imp*_*dge 4 javascript node.js ecmascript-6 babeljs

if (true) {
  let x = 5
}
Run Code Online (Sandbox Code Playgroud)

按预期工作(没有语法错误),但是

if (true) let x = 5
Run Code Online (Sandbox Code Playgroud)

抛出SyntaxError: Unexpected strict mode reserved wordNode 4.1.0和babel

这是预期的行为吗?我知道这是一个愚蠢的例子.我只是想知道这是不是一个错误.

Fel*_*ing 10

是的,这是预期的行为.声明的制作规则if

 if ( Expression[In, ?Yield] ) Statement[?Yield, ?Return]
Run Code Online (Sandbox Code Playgroud)

let声明不是aStatement,因此不允许在此职位:

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] ;
Run Code Online (Sandbox Code Playgroud)