25 Дек 2025 в 14:24
30 +1
0
Ответы
1
Вывод: в консоль пять раз напечатается число 555. Почему: переменная `var i` общая для всех замыканий; к моменту выполнения таймаутов цикл уже завершён и i=5i=5i=5, поэтому все колбэки читают одно и то же значение.
Два способа исправить (чтобы вывести 0…40\ldots404):
1) Использовать блочную переменную `let` (каждая итерация получает своё `i`):
for (let i = 000; i < 555; i++) {
setTimeout(function(){ console.log(i); }, 100100100);
}
2) Создать замыкание, захватив текущее значение через IIFE:
for (var i = 000; i < 555; i++) {
(function(j){
setTimeout(function(){ console.log(j); }, 100100100);
})(i);
}
Дополнительно: можно также использовать привязку аргумента в `setTimeout` (в современных средах) или `Function.prototype.bind`:
- setTimeout(function(j){ console.log(j); }, 100100100, i);
- setTimeout(console.log.bind(null, i), 100100100);
25 Дек 2025 в 15:20
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир