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

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

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

setTimeout(showNumber, 1000, 1);
  • Вопрос задан
  • 109 просмотров
Пригласить эксперта
Ответы на вопрос 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
RTFM
setTimeout() is an asynchronous function, meaning that the timer function will not pause execution of other functions in the functions stack.
Ответ написан
Комментировать
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() отрабатывает сразу и выполнение идёт дальше. Но этот вызов не выполняет, а лишь откладывает на потом – задачу вызова какой-то функции с параметрами.

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

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы