これにより、構文エラーが発生します。なんで?
for-in-loop との混同を避けるため。for ループの構文仕様は明示的です。
IterationStatement : for ( ExpressionNoIn
opt
; Expression
opt
; Expression
opt
) Statement
IterationStatement : for ( var VariableDeclarationListNoIn ; Expression
opt
; Expression
opt
) Statement
このNoIn
サフィックスは構文文法全体に広がり、11.8 関係演算子 (構文) セクションで終わります。
RelationalExpression :
ShiftExpression
RelationalExpression < ShiftExpression
RelationalExpression > ShiftExpression
RelationalExpression <= ShiftExpression
RelationalExpression >= ShiftExpression
RelationalExpression instanceof ShiftExpression
RelationalExpression in ShiftExpression
RelationalExpressionNoIn :
ShiftExpression
RelationalExpressionNoIn < ShiftExpression
RelationalExpressionNoIn > ShiftExpression
RelationalExpressionNoIn <= ShiftExpression
RelationalExpressionNoIn >= ShiftExpression
RelationalExpressionNoIn instanceof ShiftExpression
注:NoIn
バリアントは、関係式の in 演算子と for ステートメントの in 演算子を混同しないようにするために必要です。
ただし、バリアントが通常の for ループで使用される理由がわかりません。for NoIn
-in-production では妥当です。プログラマーの混乱を避け、パーサーを単純化するためだと思います。