Рассмотрим следующие фрагменты кода
var a = [1, 2, 3, 4];
for (a of a) { // The first 'a' is made by mistake
console.log(a);
}
Первый a
в цикле for
написан по ошибке. Я думаю, что вышеприведенный код должен запускать ошибку, потому что когда a
назначается 1
в первой итерации, тогда a
не является итерируемым объектом. Поэтому на следующей итерации должна быть выброшена ошибка.
Фактически, результаты следующие:
1
2
3
4
Кажется, что приведенный выше код может правильно итерации массива. После цикла for
результат a
равен 4
. Почему?
> a
4
Для дальнейшего исследования я попытался найти некоторую информацию из ECMA-6 doc
, но меня смущает следующая инструкция.
for (var ForBinding of AssignmentExpression) Statement
for (ForDeclaration of AssignmentExpression) Statement
Чтобы понять ForBinding
и ForDeclaration
, проверьте следующий код.
var a = [1, 2, 3, 4];
for (var a of a) {
console.log(a);
}
console.log(a);
К сожалению, результат такой же, как и предыдущие коды. В чем разница между for (var a in a)
и for (a in a)
?