Материал предоставлен http://it.rfet.ru

Почему выводится 3? (Слайд №14)

8 лет назад

Здравствуйте, не совсем понял, почему выводиться цифра 3 в этом коде:

 for (var i = 0; i < 3; i++)
   setTimeout(function() {
     console.log(i);
   }, 0);

Ведь переменная i должна увеличиться только до 2. Почему так происходит?

8 лет назад

Здравствуйте, Денис Викторович.

Хочу обратить Ваше внимание, что код JavaScript выполняется в одном потоке (как это и написано в курсе).

Теперь немного о коде

Как Вы думаете почему прекращается выполнение цикла?

Прекращение цикла

Потому что условие i < 3 становится ложным, а первое число i, которое будет удовлетворять данному условию — 3: 3 < 3? — нет.

Что делает функция setTimeout?

Функция setTimeout

Данная функция запускает выполение функции, которое произойдёт спустя время, указанное в параметре delay. Если там стоит число 0, то она будет запущено с задержкой 0, но после всех операций, которые выполняется сейчас.

Что фактически происходит?

Фактическое исполнение кода

Фактически сначала выполняется полностью цикл for, ставя в очередь 3 функции setTimeout, которые должны вывести число i. К концу выполнения цикла for i будет равно 3, после этого и будет выполяться каждая из функций, переданная в setTimeout. Соответственно данный код 3 раза выведет число 3.

С уважением,
Валерий Алигорский.

8 лет назад

Понял, спасибо!

Ваш комментарий

Комментирование доступно только для авторизованных пользователей.