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