ホーム ›
エラー解決 › JavaScript › Maximum call stack size exceeded
JavaScript ERROR
JavaScript Maximum call stack size exceeded の原因と解決法
関数が自分自身を無限に呼び続けたときに発生するエラーです。再帰関数の「終了条件」の抜けが典型的な原因です。
このエラーメッセージ
Uncaught RangeError: Maximum call stack size exceeded
原因
- 再帰関数に終了条件(ベースケース)がない
- 終了条件が永遠に満たされない(値が減っていない等)
- 2つの関数が互いに呼び合うループになっている
❌ エラーになるコード
NG
function countdown(n) {
console.log(n);
countdown(n - 1); // 止まる条件がない
}
countdown(3);
✅ 修正したコード
OK
function countdown(n) {
if (n < 0) return; // 終了条件
console.log(n);
countdown(n - 1);
}
countdown(3);
▶ 修正済みコードを実行エディタで開く
progoのJavaScript実行環境(インストール不要・登録不要)でその場で動作を確認できます。
解決のポイント
再帰関数には必ず終了条件(ベースケース)を先頭に書きます。「いつ止まるか」「毎回の呼び出しで終了条件に近づいているか」の2点を確認しましょう。深い再帰が必要な処理は、forやwhileのループに書き換えるとスタックを消費せず安全です。
よくある質問
再帰を使っていないのに出るのはなぜ?
getterの中で自分自身を参照している、イベントハンドラ内で同じイベントを発火しているなど、間接的な無限ループが原因のことがあります。
スタックの上限は増やせる?
ブラウザでは変更できません。上限に頼らず、ループへの書き換えや終了条件の修正で対処します。