Выбор ответа Junior Event loop спрашивают часто обновлено

Что на самом деле значит setTimeout(fn, 0)

Вопрос

Что означает setTimeout(fn, 0)?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Поставить fn отдельной задачей: после текущего кода и всех микрозадач. Задержка в setTimeout минимальная, а не точная.

Варианты ответа

  1. Поставить fn отдельной задачей: после текущего кода и всех микрозадачправильный ответ
  2. Выполнить fn немедленно и синхронно, прямо на месте вызова таймера
  3. Выполнить fn раньше всех промисов, потому что задержка у него нулевая
  4. Выполнить fn ровно через 0 мс, прервав текущий код на середине

Разбор

Задержка в setTimeout минимальная, а не точная. Колбэк становится задачей, а задачи выполняются только после того, как стек опустел и очередь микрозадач выполнена. Поэтому then уже готового промиса всегда сработает раньше. Ничего синхронного и ничего прерывающего текущий код в JavaScript нет: код выполняется до конца. Реальная задержка может быть больше из-за загрузки потока, минимальных 4 мс при глубокой вложенности и троттлинга в фоновой вкладке.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме