Що робить і повертає setTimeout()?
Що робить setTimeout()
setTimeout() - це функція планування завдань, яка:
- реєструє колбек (функцію) у Web API або Node.js Timer API,
- запускає таймер на заданий час (у мілісекундах),
- після завершення цього часу - додає колбек у чергу макротасок (Task Queue),
- колбек буде виконаний лише тоді, коли стек викликів звільниться.
Синтаксис
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
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.