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

Почему console.log переменной в set.timeout «перевыполняет» действие?

var timer = setTimeout(function tick() {
    if (secVal <= 1000) {
      sec.text(secVal++);
      timer = setTimeout(tick, 0);
    }
    console.log(secVal);
   
  }, 0);


Почему этот код в поле заносит правильное значение (от 0 до 1000), а console.log пробегает до 1001, выдавая его два раза?
  • Вопрос задан
  • 77 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 4
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Потому что ++
Постинкремент возвращает значение переменной до инкремента.
Ответ написан
Комментировать
Когда secVal == 1000, условие истинно и вы заходите в него. Выставляете 1001-ый вызов timer = setTimeout(tick, 0);, вызываетесь, условие не срабатывает, а вот console.log(secVal); - да. Оно же за границами if-а.
Ответ написан
Комментировать
KickeRocK
@KickeRocK
FrontFinish
Ну а какой результат вы ожидаете?
на 1000-ой итерации он выведет 1000 и добавит 1, на следующей он остановится, но значение secVal так и останется 1001.
Ответ написан
Комментировать
rockon404
@rockon404
Frontend Developer
Потому-что когда последний раз срабатывает условие:
secVal <= 1000
secVal равно 1000
После вызова:
secVal++
значение становится 1001
следующей строкой вы запускаете новый таймаут
затем выводите 1001 в консоль
после этого запускается колбек последнего таймаута
условие дает false, secVal не увеличивается и новый таймаут не вызывается
в консоль снова приходит 1001
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы