Ответ 1
for
оценивает значение "AssignmentExpression" и выполняет итерацию по нему. Значение получается только один раз в начале итерации, поэтому повторное использование одной и той же переменной вполне допустимо (также довольно запутанно).
Присутствие var
: for (a of ...)
и for (var a of ...)
не делает различий в 1 в коде, поскольку у вас уже есть a
, поэтому он просто повторно объявит одну и ту же переменную,
Чтобы быть точным, существуют случаи, когда поведение отличается - когда a
объявляется во внешней области для текущей функции var
версия будет теневое это значение (как в JavaScript все инструкции var
поднимаются на вершину ):
var a = [1,2,3];
function tryForVar() {
// Note that declaration of `a` is hoisted here as var a = undefined;
// for (var a ... does not work as expected as local 'a' is undefined
for (var a of a) {
console.log(a); // log 'undefined' once
}
console.log(a); // undefined
}
tryForVar();
console.log(a); // [1,2,3]
function tryFor() {
// Note that declaration of `a` from outer scope
// for (a ... works fine as it uses outer 'a'
for (a of a) {
console.log(a); // logs all 1,2,3 in sequence
}
console.log(a); // 3
}
tryFor();
console.log(a); // 3