Первый раздел объявления for
l oop (по большей части) выполняется только один раз, в самом начале l oop. Ваш код эквивалентен:
function multiply(arr, n) {
var product = 1;
var i = 0;
for (; i < n; i++) {
product *= arr[i];
}
return product;
}
Что эквивалентно:
function multiply(arr, n) {
var product = 1;
var i = 0;
while (true) {
// for loop body:
product *= arr[i];
// for loop declaration part:
i++;
if (!(i < n)) break;
}
return product;
}
Итак, i
назначается 0
только один раз, в самом начале.
Я уточнил выше с помощью по большей части , потому что, когда поведение несколько страннее, когда переменная объявлена с let
, а let
имеет область видимости блока, а не область действия функции - с let
, каждая итерация создает отдельную привязку для имени переменной. (но это не стоит беспокоиться в вашем случае - это действительно то, что нужно учитывать, когда for
l oop использует переменную асинхронно)