Проанализируйте следующий фрагмент на JavaScript: "for (var i = 0; i console.log(i), 0); }" — что выведется и почему, как изменить код, чтобы выводились 0,1,2

16 Мар в 09:28
19 +1
0
Ответы
1
Что выведется и почему
- В приведённом фрагменте в консоль будет выведено три раза значение 333 (т.е. строки: 333, 333, 333).
- Причина: переменная `i` объявлена через `var` — она имеет функциональную (не блочную) область видимости. Все три колбэка `setTimeout` захватывают одну и ту же переменную `i`. Колбэки выполняются асинхронно после завершения цикла, когда `i` уже равно 333.
Как сделать так, чтобы выводились 0,1,20,1,20,1,2 1) Использовать `let` (каждая итерация получает свою переменную):
```
for (let i = 0; i < 3; i++) {
setTimeout(() => console.log(i), 0);
}
```
2) Замкнуть текущее значение `i` через IIFE:
```
for (var i = 0; i < 3; i++) {
(function(j) {
setTimeout(function() { console.log(j); }, 0);
})(i);
}
```
3) Передать значение как аргумент `setTimeout` (поддерживается в браузерах/Node):
```
for (var i = 0; i < 3; i++) {
setTimeout(console.log, 0, i);
}
```
Любой из этих вариантов выведет последовательность 0,1,20, 1, 20,1,2.
16 Мар в 10:53
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир