setTimeout & setInterval
Таймеры
Внутренний таймер-планировщик браузера позволяет откладывать вызов функции на определенный период времени. Для этого есть тайм-ауты и интервалы, которые контролируют когда и как часто вызывается функция. Таймеры реализованы в браузере, а не встроены в язык, и доступны на глобальном объекте window
.
Тайм-аут
Метод setTimeout()
позволяет запланировать запуск функции через определённое время.
callback
- функция, выполнение которое необходимо запланировать.delay
- время в миллисекундах, через которое callback-функция будет вызвана один раз.
Дополнительные аргументы (arg1
, arg2
и т. д.) будут переданы callback-функции во время вызова. Возвращает цифровой идентификатор созданного таймера, который используется для его удаления. .
Если нам, по какой-то причине, нужно отменить вызов функции внутри тайм-аута, используется метод clearTimeout(id)
, которая принимает идентификатор таймера и очищает (удаляет) его.
Поскольку мы вызвали clearTimeout()
, который исполнится раньше чем будет вызвана функция greet()
, таймер с timerId
будет удалён и регистрация отложенного вызова greet()
отменится. Поэтому в консоль ничего не выведется.
Интервал
Метод setInterval()
- это простой способ повторения кода снова и снова с установленным промежутком времени повторений. Синтаксис и параметры такие же как у setTimeout()
. В отличие от setTimeout()
, интервал запускает выполнение функции не один раз, а регулярно повторяет её через указанный промежуток времени. Остановить исполнение можно вызовом метода clearInterval(id)
.
При клике на кнопку «Start» запустим интервал и будем каждую секунду выводить в консоль строку. Используем Math.random()
чтобы строки были разные. По клику на кнопку «Stop» вызовем clearInterval()
и передадим идентификатор интервала который надо остановить.
Частота срабатывания счетчика
У браузерного таймера есть минимальная возможная задержка. В современных браузерах она колеблется примерно от 0
до 4
миллисекунд. В более старых браузерах задержка может быть больше и достигать 15
миллисекунд. По стандарту, минимальная задержка составляет 4
миллисекунды, так что разницы между setTimeout(callback, 1)
и setTimeout(callback, 4)
нет.
Таймер может срабатывать реже чем указано в параметре delay
, потому что при слишком большой загрузке процессора некоторые запуски функций-интервалов будут пропущены. Браузеры продолжают выполнять тайм-ауты и интервалы даже если вкладка браузера неактивна, но при этом снижают частоту срабатывания таймеров.
Last updated