如果没有牙套就让进来
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] ;
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] ;