再帰できる回数には限度がある

コールスタックとは呼び出し中の関数情報を積み重ねたもの。そのサイズ限度額は処理系(ブラウザ、Node.jsなど)で異なる(再帰回数も)。下記は限度額を超過し、途中でエラーになる例。

// 再帰できる回数には限度がある。
let 再帰回数 = 0
function 再帰() {
  console.log(再帰回数++)
  let a, b, c, d, e, f, g // 変数などが増えるほど再帰できる回数は減る。
  再帰() // 呼び出し中の関数が終わるまで捨てられない情報が積み重なる。
}

再帰()
// 途中で
// RangeError: Maximum call stack size exceeded

// ループならコールスタックの積み重ねがなく、回数限度なし(無限ループ)。
let ループ回数 = 0
while (true) {
  console.log(ループ回数++)
  let a, b, c, d, e, f, g // 変数などが増えても無限ループ。
}

(参考) Node.jsのデフォルトのコールスタックサイズ(下記では984KB)を確認するコマンド。

node --v8-options | grep '\--stack-size' -A 1
  --stack-size (default size of stack region v8 is allowed to use (in kBytes))
        type: int  default: 984