setTimeout(fn, 0)
setTimeout(fn, 0) не виконує функцію одразу, як може здатися!
Він ставить колбек fn у чергу на виконання після поточного коду - тобто асинхронно, у наступному циклі подій (event loop).
Що відбувається
javascript
setTimeout(() => console.log('timeout'), 0);
console.log('main');Вивід:
javascript
main
timeoutХоча затримка = 0, JS спершу виконує весь поточний стек (усе, що синхронне), а потім уже - колбеки з черги таймерів (callback queue).
Чому так
JavaScript - однопотоковий.
Усі асинхронні операції (setTimeout, fetch, Promise) потрапляють у чергу подій,
і виконуються тільки після того, як стек викликів звільниться.
Для чого використовується setTimeout(fn, 0)
Відкласти виконання коду, щоб:
- дочекатися завершення поточних операцій;
- не блокувати інтерфейс;
- запустити код "після всього іншого";
- дати браузеру оновити DOM перед виконанням.
Приклад:
javascript
console.log('A');
setTimeout(() => console.log('B'), 0);
console.log('C');Вивід:
javascript
A
C
BПідсумок
| Що робить | Ставить колбек у чергу на наступний цикл подій |
|---|---|
| Час затримки | Мінімум 0 мс, але фактично трохи пізніше |
| Виконання | Після всього синхронного коду |
| Використовується для | Відкладеного коду, синхронізації, уникнення блокування UI |
Коротка відповідь
Для співбесідиPremium
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.