Выбор ответа Junior Event loop спрашивают часто обновлено
Что на самом деле значит setTimeout(fn, 0)
Вопрос
Что означает setTimeout(fn, 0)?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Поставить fn отдельной задачей: после текущего кода и всех микрозадач. Задержка в setTimeout минимальная, а не точная.
Варианты ответа
- Поставить
fnотдельной задачей: после текущего кода и всех микрозадачправильный ответ - Выполнить
fnнемедленно и синхронно, прямо на месте вызова таймера - Выполнить
fnраньше всех промисов, потому что задержка у него нулевая - Выполнить
fnровно через 0 мс, прервав текущий код на середине
Разбор
Задержка в setTimeout минимальная, а не точная. Колбэк становится задачей, а задачи выполняются только после того, как стек опустел и очередь микрозадач выполнена. Поэтому then уже готового промиса всегда сработает раньше. Ничего синхронного и ничего прерывающего текущий код в JavaScript нет: код выполняется до конца. Реальная задержка может быть больше из-за загрузки потока, минимальных 4 мс при глубокой вложенности и троттлинга в фоновой вкладке.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.