Ошибка бесконечной рекурсии
Вопрос
Какая ошибка возникнет при вызове функции?
function countDown(n) {
return countDown(n - 1);
}
countDown(10);
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Варианты ответа
- RangeError: Maximum call stack size exceededправильный ответ
- Функция зависнет навсегда без ошибки, как цикл
while (true) - TypeError: countDown is not a function
- SyntaxError: у рекурсивной функции нет условия выхода
Разбор
Без базового случая каждый вызов добавляет кадр в стек вызовов, и при достижении лимита движок бросает RangeError с сообщением про размер стека. Бесконечного зависания не будет: стек конечен, в отличие от бесконечного цикла while. Функция существует, так что не TypeError. Парсер не проверяет условия выхода, синтаксически код верный. Хвостовую оптимизацию рекурсии из ES2015 реализовал только Safari, в V8 её нет.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Как устроена обработка ошибок в приложении
Следующий вопрос
Почему не стоит бросать строку