console.log避免最大调用堆栈

时间:2019-08-06 02:42:30

标签: javascript node.js v8

下面的代码按预期得到了错误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

更新

Chrome出现错误 enter image description here

1 个答案:

答案 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秒。