Как работает event loop в JavaScript? Объясните на примере с setTimeout и промисами.
Как отвечать ▾Скрыть подсказку ▴
Как отвечать: Опишите call stack, microtask- и macrotask-очереди, порядок выполнения промисов и таймеров — и выведите точный порядок вывода в консоль на конкретном примере.
Пример сильного ответа
В JavaScript один поток выполнения, поэтому асинхронность строится на очереди задач. Синхронный код идёт в стеке, а колбэки попадают в очереди: макротаски — таймеры и события, микротаски — промисы. После каждого колбэка стек опустошается, и движок сначала полностью разбирает очередь микротасок, и только потом берёт следующую макротаску. Поэтому setTimeout с нулевой задержкой срабатывает позже, чем промис: промис — микротаска, таймер — макротаска. На практике это помогает объяснять порядок выполнения: у нас два независимых запроса объединялись в один батч обновления состояния, и время до первой отрисовки сократилось примерно на 40%.
- Чёткое разделение макро- и микротасок
- Сравнение на примере setTimeout и промисов
- Есть личный результат с цифрой
Возьмите структуру и подставьте свой опыт — заученный чужой ответ интервьюер слышит сразу.