Answer
t.me/js_testОтвет:
3 3 3 и 0 1 2
Объяснение:
Из-за очереди событий в JavaScript, функция setTimeout
вызывается после того как цикл будет завершен. Так как переменная i
в первом цикле была определена с помощью var
, она будет глобальной. В цикле мы каждый раз увеличиваем значение i
на 1
, используя унарный оператор ++
. К моменту выполнения функции setTimeout
значение i
будет равно 3
в первом примере.
Во втором цикле переменная i
определена с помощью let
. Такие переменные (а также const
) имеют блочную область видимости (блок это что угодно между { }
). С каждой итерацией i
будет иметь новое значение, и каждое значение будет замкнуто в своей области видимости внутри цикла.
Код для проверки:
for (var i = 0; i < 3; i++) { setTimeout(() => console.log(i), 1); } for (let i = 0; i < 3; i++) { setTimeout(() => console.log(i), 1); }