在Chrome和Node中,以下代码会引发错误:
function noop() {}
var a = new Array(1e6)
// Array[1000000]
noop.apply(null, a)
// Uncaught RangeError: Maximum call stack size exceeded
我理解为什么将100万个参数传递给一个函数可能是一个坏主意,但有人可以解释为什么错误是Maximum call stack size exceeded
而不是更相关的东西吗?
(如果这看起来很无聊,原始案例是Math.max.apply(Math, lotsOfNumbers)
,这是从数组中获取最大数字的一种不合理的方式。)
答案 0 :(得分:8)
函数参数放在堆栈上。您试图将一百万个参数放入堆栈中,并且这超过了最大堆栈大小。因此错误消息与错误原因非常相关。