ホーム › エラー解決 › JavaScript › Maximum call stack size exceeded
JavaScript ERROR

JavaScript Maximum call stack size exceeded の原因と解決法

関数が自分自身を無限に呼び続けたときに発生するエラーです。再帰関数の「終了条件」の抜けが典型的な原因です。

このエラーメッセージ

Uncaught RangeError: Maximum call stack size exceeded

原因

❌ エラーになるコード

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の中で自分自身を参照している、イベントハンドラ内で同じイベントを発火しているなど、間接的な無限ループが原因のことがあります。
スタックの上限は増やせる?
ブラウザでは変更できません。上限に頼らず、ループへの書き換えや終了条件の修正で対処します。