Задать вопрос

В каком порядке выполняется этот код?

Вызов функции осуществляется до условия, но каким-то образом условие все равно выполняется(т.е. выполнение до него доходит). КАК? Если функция должна зациклиться и НИКОГДА не дойти до условия ?

function showNumber(num) {
  console.log(num);
  let timeId = setTimeout(showNumber, 1000, ++num);
  if (num === 6) {
    clearTimeout(timeId);
  }
}

setTimeout(showNumber, 1000, 1);
  • Вопрос задан
  • 114 просмотров
Подписаться 1 Простой 5 комментариев
Ответ пользователя Сергей Соколов К ответам на вопрос (2)
sergiks
@sergiks Куратор тега JavaScript
♬♬
  1. объявили функцию
  2. зарядили первый таймаут: он через 1 секунду вызовет showNumber(1)
  3. ... пауза 1c, ничего не происходит
  4. вызвалась showNumber(1) - вывела в консоль "1", и зарядила новый таймаут, уже с showNumber(2). Убедились, что 2 не равно 6.
  5. ... пауза 1с, опять скукота, ничего не происходит
  6. вызвалась showNumber(2), вывели в консоль "2", зарядили таймаут (3)
  7. ... ... ...
  8. наконец поднялся счётчик до 5. Всё то же: зарядили таймаут, прошла 1 секунда,
    вызвалась showNumber(5)
    Тоже выводит в консоль "5", заряжает таймаут (6), но на этот раз срабатывает условие 6 === 6, и раз так — тут же гасит свежезаряженный таймаут, ибо нечего ему срабатывать.
  9. Занавес.


Наверное, не уловили пока, как работает setTimeout(). Вызов setTimeout() отрабатывает сразу и выполнение идёт дальше. Но этот вызов не выполняет, а лишь откладывает на потом – задачу вызова какой-то функции с параметрами.

Пишет письмо с заданием, запечатывает в конверт и относит на почту. И идёт дальше по своим делам. А когда-то там письмо дойдёт, наконец – его распечатают и выполнят задание.
Ответ написан
Комментировать