JavaScript: setTimeout внутри цикла
как ведет себя функция setTimeout внутри цикла
Функция setTimeout() является асинхронной, а это означает, что она запускается, только после выполнения всех операций в основном потоке данных JavaScript. Но, что получится, если поместить эту функцию в цикл for.
for (var i = 0; i < 5; i++) {
setTimeout(() => console.log(i), 0)
}
Какой результат будет выведен на экран после выполнения такого кода?
Для начала упростим задачу: поместим в цикл только console.log(i) без setTimeout(). В таком случае операции будут выполняться в основном потоке: с каждой итерацией в консоли будет появляться текущее значение переменной i. В результате на экране появится последовательность из пяти чисел от 0 до 4.
В случае с использованием setTimeout() внутри цикла, console.log будет выполняться только после завершения всех операций в стеке, а значит после того, как все итерации цикла буду выполнены и значение переменной i достигнет цифры 5.
Переменная i объявлена с помощью var. А это означает, что она является глобальной и промежуточные значения такой переменной не будут сохраняться внутри стрелочной функции () => console.log(i).
Таким образом, на экран 5 раз будет выведено значение 5. Каждый раз в новой строке.
Спасибо за внимание.
