JavaScript LinuxWindowsmacOS

JavaScript — RangeError: Maximum call stack size exceeded

  • Обновлено
  • Чтение ≈ 2 минуты

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

Ошибка возникает при бесконечной рекурсии или слишком глубокой цепочке вызовов. Добавьте условие выхода или перепишите алгоритм циклом.

В этой статье
  1. Что означает ошибка
  2. Причины и признаки
  3. Пошаговое решение
  4. Если проблема осталась

#Что означает ошибка

Сообщение
Maximum call stack size exceeded

Ошибка возникает при бесконечной рекурсии или слишком глубокой цепочке вызовов. Добавьте условие выхода или перепишите алгоритм циклом.

#Причины и признаки

Возможная причинаКак узнатьЧто делать
Нет условия выходаФункция повторно вызывает себя без остановки.Добавьте достижимое условие завершения.
Взаимные вызовыДве функции взаимно вызывают друг друга.Разорвите цикл, проверяя изменение состояния.
Геттер вызывает себяГеттер читает собственное свойство.Исправьте обращение к отдельному внутреннему полю.
Глубокая структураОбъект или дерево чрезмерно глубоки.Рассмотрите итерацию с явным стеком.

#Пошаговое решение

  1. Найдите повторяющуюся функциюВ браузере нажмите F12 → «Источники»/«Консоль» и раскройте стек RangeError: Maximum call stack size exceeded; в Node.js прочитайте стек в терминале. Повторяющиеся имена функций или вызов одного обработчика другим указывают на бесконечную рекурсию. Не увеличивайте размер стека, пока цикл не найден.
  2. Проверьте условие завершенияОткройте в редакторе функцию из верхней строки стека; проверьте, что каждый рекурсивный вызов уменьшает размер задачи и имеется достижимое условие return. Например, обход дерева должен прекращаться на пустом узле; взаимно вызывающие обработчики — проверять, изменилось ли состояние.
  3. Проверьте данные и событияЕсли ошибка возникает только на конкретном объекте, проверьте циклические ссылки в графе данных, повторный вызов сеттера или обработчика change. Установите точку останова до рекурсивного вызова, проследите аргументы нескольких шагов и убедитесь, что они меняются ожидаемо.
  4. Исправьте алгоритм и повторитеДля очень глубокой, но конечной структуры рассмотрите явный стек/очередь вместо рекурсии. Запустите проблемный сценарий с маленьким и большим входом, убедитесь, что стек не переполняется и результат корректен. Если обработка зависает, зафиксируйте минимальный пример и стек вызовов.

#Если проблема осталась

Если «JavaScript — RangeError: Maximum call stack size exceeded» повторяется, сохраните время, состояние подключения и точный текст ошибки. Не меняйте сразу несколько настроек — иначе станет трудно понять, какое действие повлияло на результат.

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.