SobesLab логотип SobesLab

Ответ

Спецификация ES2015 ввела возможность оптимизации хвостовых вызовов (то есть нерастущей рекурсии: когда последним действием функции является вызов другой функции). В теории, в строгом режиме движок может не увеличивать стек при таком вызове, а переиспользовать текущий контекст, что позволяет писать рекурсивные функции без риска переполнения стека. Однако на практике на 2024 год большинство JS-движков (V8, SpiderMonkey) не реализуют TCO из соображений совместимости и сложности. Исключением является движок Safari (WebKit), где tail-call optimization поддерживается в строгом режиме. Таким образом, в общем случае JavaScript разработчику лучше не рассчитывать на TCO – хвостовая рекурсия может привести к переполнению стека в большинстве сред.