如果没有牙套就让进来

let in if without braces

if (true) {
  let x = 5
}

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

if (true) let x = 5

在 Node 4.1.0 和 babel

中抛出 SyntaxError: Unexpected strict mode reserved word

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

是的,这是预期的行为。 The production rule of an if statement

 if ( Expression[In, ?Yield] ) Statement[?Yield, ?Return]

但是 let 声明 is not 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]
    DebuggerStatement

Declaration[Yield] :
    HoistableDeclaration[?Yield]
    ClassDeclaration[?Yield]
    LexicalDeclaration[In, ?Yield]

LexicalDeclaration[In, Yield] :
    LetOrConst BindingList[?In, ?Yield] ;