为什么'for window'中的for循环初始化会导致语法错误?

这工作。

var a = 'ontouchstart' in window;
for (;;) {
  console.log(a);
  break;
}

这会导致语法错误。 为什么?

for (var a = 'ontouchstart' in window;;) {
  console.log(a);
  break;
}

这工作。

for (var a = ('ontouchstart' in window);;) {
  console.log(a);
  break;
}

这会导致语法错误。 为什么?

为了避免与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变体以避免在for语句中将关系表达式中的in运算符与in运算符混淆。

然而,我不明白为什么NoIn变体被用在正常的for循环中 - 它们在for-in-production中是合理的。 我想这是为了避免程序员混淆并简化解析器。

链接地址: http://www.djcxy.com/p/68887.html

上一篇: Why does 'in window' in for loop initialization cause syntax error?

下一篇: How to send notification to all logged in users