Почему setTimeout в цикле while увеличивается по порядку? - PullRequest
0 голосов
/ 28 декабря 2018

У меня был вопрос на собеседовании.Я просто не понимаю, почему это печатает 5 6 7 8 9 ...

let i = 0;

while (i < 5) {
  setTimeout(() => {
    console.log(i++);
  }, 0);
  i++;
}

Ответы [ 2 ]

0 голосов
/ 28 декабря 2018
  • Ваш код начинается с i = 0.
  • Когда он входит в цикл while, он будет увеличен до 1, 2, 3, 4 и остановится, когда достигнет 5.
  • Функция setTimeout является асинхронной, поэтому даже призадержка 0, она будет вызвана после завершения текущего потока (цикл while).
  • Поскольку i был на 5, когда цикл while закончился, setTimeoutфункции будут получать его оттуда, выводя его значение и увеличивая его на единицу на каждом последующем console.log()
0 голосов
/ 28 декабря 2018

Это из-за функции setTimeout ().Даже если это задерживает 0 секунд.Это понизит его приоритет в процессоре.Все 5 действий внутри функций setTimeout будут выполняться после цикла while.Так как в конце его я 5. Таким образом, он регистрирует и увеличивает после этого ...

...