コールスタックとは呼び出し中の関数情報を積み重ねたもの。そのサイズ限度額は処理系(ブラウザ、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