14 Окт в 14:55
4 +1
0
Ответы
1

Вывод: три раза (3) (то есть строки (3), (3), (3)).

Почему: переменная i объявлена через var — она имеет функциональную область видимости, поэтому все замыкания захватывают одну и ту же переменную i. После завершения цикла i равна (3), и при вызове каждое замыкание выводит текущее значение (i), то есть (3).

Как исправить (варианты):

1) Использовать let в заголовке цикла (блочная область видимости, для каждой итерации своё i):
for (let i = 0; i < 3; i++) { funcs.push(function(){ console.log(i); }); }
Вывод: (0), (1), (2).

2) Захватить значение в IIFE:
for (var i = 0; i < 3; i++) {
(function(j){
funcs.push(function(){ console.log(j); });
})(i);
}
Вывод: (0), (1), (2).

(Оба варианта дают поочерёдный вывод (0), (1), (2).)

14 Окт в 16:45
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир