Skip to main content

Що робить і повертає setTimeout()?

Що робить setTimeout()

setTimeout() - це функція планування завдань, яка:

  1. реєструє колбек (функцію) у Web API або Node.js Timer API,
  2. запускає таймер на заданий час (у мілісекундах),
  3. після завершення цього часу - додає колбек у чергу макротасок (Task Queue),
  4. колбек буде виконаний лише тоді, коли стек викликів звільниться.

Синтаксис

javascript
setTimeout(callback, delay, ...args);

Параметри:

  • callback - функція, яку потрібно виконати;
  • delay - затримка в мілісекундах (не гарантує точний час!);
  • ...args - додаткові аргументи, які передаються в callback.

Приклад

javascript
console.log('Початок'); setTimeout(() => { console.log('Через 2 секунди'); }, 2000); console.log('Кінець');

Порядок виконання:

javascript
Початок Кінець Через 2 секунди

Чому?

  • JS спочатку виконує весь синхронний код.
  • setTimeout лише планує завдання.
  • Через 2000 мс колбек потрапляє в чергу завдань.
  • Коли стек порожній, Event Loop виконує колбек.

Що повертає setTimeout()

Функція повертає числовий ідентифікатор таймера - унікальний ID, за яким можна скасувати виконання за допомогою clearTimeout().

Приклад:

javascript
const timerId = setTimeout(() => { console.log('Не встигну виконатися'); }, 5000); clearTimeout(timerId); // скасовуємо таймер

Після виклику clearTimeout(timerId) колбек ніколи не виконається.


Важливі деталі

1. Мінімальна затримка

Навіть setTimeout(..., 0) не виконується миттєво:

javascript
setTimeout(() => console.log('B'), 0); console.log('A');

Виведе:

javascript
A B

Тому що навіть при delay = 0, колбек додається в чергу макротасок, і буде виконаний лише після очищення стека та всіх мікротасок (Promise.then тощо).


2. Не гарантує точний час

Якщо JS зайнятий виконанням іншої функції - таймер "запізниться".

javascript
setTimeout(() => console.log('Я запізнився!'), 1000); const start = Date.now(); while (Date.now() - start < 5000) {} // блокуємо потік на 5 секунд

Колбек спрацює через 5 секунд, а не через 1 - тому що стек був зайнятий.


3. Можна передавати аргументи

javascript
setTimeout((a, b) => { console.log(a + b); }, 1000, 5, 7); // -> через секунду виведе 12

ПІДСУМОК

Що робитьПовертаєДе виконуєтьсяЧерга
Планує виконання функції через задану затримкуЧисловий ID таймераВсередині Web API (браузер) або Node Timer APIМакротаски (Task Queue)
Можна скасуватиclearTimeout(timerId)

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.