下面的代码按预期得到了错误Maximum call stack size exceeded
。
function recurrent (i = 0) {
recurrent(++i)
}
recurrent ()
我希望它也超过了最大调用堆栈数。 但是,它为什么运行?
function recurrent (i = 0) {
console.log(i)
recurrent(++i)
}
recurrent ()
结果:
打印到一个数字并停止,但没有错误。
...
10815
10816
10817
10818
10819
10820
10821
10822
10823
10824
我正在Windows 10上使用NodeJs 10
答案 0 :(得分:5)
他们都会以完全相同的方式失败,就像人们期望的那样。只是log语句将功能减慢到可能不会立即失败的程度。
以下是使用time
计时每个版本的结果:
# With logging:
...
RangeError: Maximum call stack size exceeded
real 0m0.204s
user 0m0.171s
sys 0m0.035s
# Without logging
...
RangeError: Maximum call stack size exceeded
real 0m0.082s
user 0m0.054s
sys 0m0.021s
在Chrome中进行测试时,会发生相同的过程,但是速度要慢得多。花费了RangeError
超过30秒。