Чем синхронная рекурсия отличается от рекурсии через таймер

Синхронная рекурсия накапливает вызовы до переполнения стека. Таймер возвращает управление и запускает следующий вызов отдельной задачей без роста того же стека.

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

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

Синхронная рекурсия накапливает вызовы до переполнения стека. Таймер возвращает управление и запускает следующий вызов отдельной задачей без роста того же стека.

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

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

Условие

Сравните function a(){ a(); } a(); и function b(){ setTimeout(b, 0); } b();. Что происходит со стеком и может ли интерфейс обрабатывать события?

Ответ

Синхронная рекурсия накапливает вызовы до переполнения стека. Таймер возвращает управление и запускает следующий вызов отдельной задачей без роста того же стека.

В первом случае внешний код не продолжится до исключения, а очередь событий не обслуживается во время рекурсии. Во втором каждый вызов планирует один следующий и завершается; другие задачи получают возможность выполняться. Это всё равно бесконечная работа: предусмотрите условие остановки и отмену таймера. Нулевой интервал не гарантирует немедленный запуск.

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

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

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

Подробнее