> For the complete documentation index, see [llms.txt](https://aleksandra-hrevtsova.gitbook.io/senior-front-end-javascript/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://aleksandra-hrevtsova.gitbook.io/senior-front-end-javascript/settimeout-and-setinterval.md).

# setTimeout & setInterval

## Таймеры

Внутренний таймер-планировщик браузера позволяет откладывать вызов функции на определенный период времени. Для этого есть тайм-ауты и интервалы, которые контролируют когда и как часто вызывается функция. Таймеры реализованы в браузере, а не встроены в язык, и доступны на глобальном объекте `window`.

### Тайм-аут[​](https://goit.global/textbooks/javascript-yk5evp/v2/docs/lesson-17/timers#%D1%82%D0%B0%D0%B9%D0%BC-%D0%B0%D1%83%D1%82) <a href="#taim-aut" id="taim-aut"></a>

Метод `setTimeout()` позволяет запланировать запуск функции через определённое время.

```
const timerId = setTimeout(callback, delay, arg1, arg2, ...);
```

* `callback` - функция, выполнение которое необходимо запланировать.
* `delay` - время в миллисекундах, через которое callback-функция будет вызвана один раз.

Дополнительные аргументы (`arg1`, `arg2` и т. д.) будут переданы callback-функции во время вызова. Возвращает цифровой идентификатор созданного таймера, который используется для его удаления. .

Если нам, по какой-то причине, нужно отменить вызов функции внутри тайм-аута, используется метод `clearTimeout(id)`, которая принимает идентификатор таймера и очищает (удаляет) его.

```
const greet = () => {  console.log("Hello!");};const timerId = setTimeout(greet, 3000);clearTimeout(timerId);
```

Поскольку мы вызвали `clearTimeout()`, который исполнится раньше чем будет вызвана функция `greet()`, таймер с `timerId` будет удалён и регистрация отложенного вызова `greet()` отменится. Поэтому в консоль ничего не выведется.

### Интервал[​](https://goit.global/textbooks/javascript-yk5evp/v2/docs/lesson-17/timers#%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B2%D0%B0%D0%BB) <a href="#interval" id="interval"></a>

Метод `setInterval()` - это простой способ повторения кода снова и снова с установленным промежутком времени повторений. Синтаксис и параметры такие же как у `setTimeout()`. В отличие от `setTimeout()`, интервал запускает выполнение функции не один раз, а регулярно повторяет её через указанный промежуток времени. Остановить исполнение можно вызовом метода `clearInterval(id)`.

```
const timerId = setInterval(callback, delay, arg1, arg2, ...);
```

При клике на кнопку «Start» запустим интервал и будем каждую секунду выводить в консоль строку. Используем `Math.random()` чтобы строки были разные. По клику на кнопку «Stop» вызовем `clearInterval()` и передадим идентификатор интервала который надо остановить.

### Частота срабатывания счетчика[​](https://goit.global/textbooks/javascript-yk5evp/v2/docs/lesson-17/timers#%D1%87%D0%B0%D1%81%D1%82%D0%BE%D1%82%D0%B0-%D1%81%D1%80%D0%B0%D0%B1%D0%B0%D1%82%D1%8B%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F-%D1%81%D1%87%D0%B5%D1%82%D1%87%D0%B8%D0%BA%D0%B0) <a href="#chastota-srabatyvaniya-schetchika" id="chastota-srabatyvaniya-schetchika"></a>

У браузерного таймера есть минимальная возможная задержка. В современных браузерах она колеблется примерно от `0` до `4` миллисекунд. В более старых браузерах задержка может быть больше и достигать `15` миллисекунд. По стандарту, минимальная задержка составляет `4` миллисекунды, так что разницы между `setTimeout(callback, 1)` и `setTimeout(callback, 4)` нет.

Таймер может срабатывать реже чем указано в параметре `delay`, потому что при слишком большой загрузке процессора некоторые запуски функций-интервалов будут пропущены. Браузеры продолжают выполнять тайм-ауты и интервалы даже если вкладка браузера неактивна, но при этом снижают частоту срабатывания таймеров.
