Skip to main content

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

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