我在 Chrome Stable 里测试的:
Array.apply(null, new Array(124995))
报错是:
Maximum call stack size exceeded
小一个数字就不报错了.
然后在 Node 环境里尝试了一下, 这个数字要小不少, 但没往下去确定.
很奇怪, 这个表达式不是递归调用啊, 为什么报超出最大栈呢?
我在 Chrome Stable 里测试的:
Array.apply(null, new Array(124995))
报错是:
Maximum call stack size exceeded
小一个数字就不报错了.
然后在 Node 环境里尝试了一下, 这个数字要小不少, 但没往下去确定.
很奇怪, 这个表达式不是递归调用啊, 为什么报超出最大栈呢?
9 回答9.4k 阅读
6 回答5k 阅读✓ 已解决
5 回答3.6k 阅读✓ 已解决
4 回答8k 阅读✓ 已解决
7 回答10k 阅读
5 回答7.3k 阅读✓ 已解决
5 回答8.3k 阅读
首先你要知道
new Array(124995)
创建一个有124995个元素的数组,其中每个元素都是undefined
。然后,
X.apply(Y, [arg1, arg2, ...])
的含义其实是Y.X(arg1, arg2, ...)
,在你的程序里,你在用一个有124995个元素的数组调用Array函数,相当于null.Array(undefined, undefined, ...)
,参数共有124995个。虽说没有递归,但是函数调用时会把每个参数都放在stack里,你一下放了十几万个,stack就爆掉了。