Синхронная рекурсия накапливает вызовы до переполнения стека. Таймер возвращает управление и запускает следующий вызов отдельной задачей без роста того же стека.
Чем синхронная рекурсия отличается от рекурсии через таймер
Синхронная рекурсия накапливает вызовы до переполнения стека. Таймер возвращает управление и запускает следующий вызов отдельной задачей без роста того же стека.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Сравните function a(){ a(); } a(); и function b(){ setTimeout(b, 0); } b();. Что происходит со стеком и может ли интерфейс обрабатывать события?
Ответ
Синхронная рекурсия накапливает вызовы до переполнения стека. Таймер возвращает управление и запускает следующий вызов отдельной задачей без роста того же стека.
В первом случае внешний код не продолжится до исключения, а очередь событий не обслуживается во время рекурсии. Во втором каждый вызов планирует один следующий и завершается; другие задачи получают возможность выполняться. Это всё равно бесконечная работа: предусмотрите условие остановки и отмену таймера. Нулевой интервал не гарантирует немедленный запуск.