Проверяет понимание механизма рекурсии и ограничений стека вызовов в JavaScript.
Стек вызовов — это структура данных, в которой хранятся активные вызовы функций. Каждый раз, когда функция вызывается, в стек добавляется новый кадр с локальными переменными и адресом возврата. Если функция вызывает саму себя без остановки, стек растёт бесконечно, пока не достигнет лимита памяти, выделенной движком. В этот момент возникает ошибка RangeError: Maximum call stack size exceeded.
Самый простой способ — написать бесконечную рекурсию без базового условия. Например:
function recurse() {
recurse(); // бесконечный вызов
}
recurse(); // через несколько секунд — ошибкаТакже можно использовать цикл с вызовом функции внутри, но рекурсия — самый наглядный пример. Даже если добавить условие выхода, но сделать его недостижимым (например, if (false) return), переполнение всё равно произойдёт.
Понимание стека помогает избегать ошибок в реальном коде. Например, при обходе дерева или графа рекурсией нужно контролировать глубину. Для глубоких структур лучше использовать итеративный подход с явным стеком или хвостовую рекурсию, если движок её поддерживает. Также стоит помнить, что лимит стека зависит от браузера или Node.js, но обычно составляет десятки тысяч кадров.
Искусственное переполнение стека — это учебный пример, который демонстрирует важность базовых условий в рекурсии. В продакшене всегда проверяйте глубину рекурсии и используйте итеративные алгоритмы для потенциально больших данных, чтобы избежать падения приложения.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию