Порядок вызовов foo и bar с Promise

Результат: foo, end, bar, timer. Foo выполняется синхронно, но передача bar в then только регистрирует будущий обработчик.

Короткий ответ

Что ответить на собеседовании

Результат: foo, end, bar, timer. Foo выполняется синхронно, но передача bar в then только регистрирует будущий обработчик.

Подробный разбор

Ответ с пояснениями

Условие

Определите вывод:

function bar() { console.log('bar'); }
function foo() {
  console.log('foo');
  Promise.resolve().then(bar);
}
setTimeout(() => console.log('timer'), 0);
foo();
console.log('end');

Ответ

Результат: foo, end, bar, timer. Foo выполняется синхронно, но передача bar в then только регистрирует будущий обработчик.

Если написать .then(bar()), bar вызовется немедленно, а then получит возвращённое им undefined. Это другой порядок и другая семантика. Аналогичное различие между передачей функции и её вызовом важно для обработчиков событий, таймеров и callbacks библиотек.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее