Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Що робить і повертає setTimeout()?». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)**`setTimeout()`** - це **функція планування завдань**, яка реєструє колбек у Web API (або Node.js Timer API), запускає таймер на заданий час і після його завершення додає колбек у **чергу макротасок**. **Ключове:** вона повертає **числовий ідентифікатор таймера**, за яким виконання можна скасувати через `clearTimeout()`.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)Зображення## Що робить 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)` | | |Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.