javascript - 为什么 apply with too many arguments 抛出 "Maximum call stack size exceeded"?

标签 javascript function apply

在 Chrome 和 Node 中,以下代码会抛出错误:

function noop() {}
var a = new Array(1e6)
// Array[1000000]
noop.apply(null, a)
// Uncaught RangeError: Maximum call stack size exceeded

我明白为什么将 100 万个参数传递给一个函数可能是个坏主意,但谁能解释为什么错误是超出最大调用堆栈大小,而不是更相关的错误?

(如果这看起来很无聊,原来的情况是 Math.max.apply(Math, lotsOfNumbers),这是一种从数组中获取最大数的不合理方法。)

最佳答案

函数参数放在堆栈上。您正试图将一百万个参数放入堆栈,这超过了最大堆栈大小。所以错误信息与错误原因非常相关。

关于javascript - 为什么 apply with too many arguments 抛出 "Maximum call stack size exceeded"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42263108/

相关文章:

python - Pandas :在列上添加重复指标

javascript - 努力在 for 循环中等待

algorithm - 将此算法转换为不使用递归的过程

javascript - 单击禁用和启用 setInterval

javascript - 显然简单的函数不返回任何内容

ocaml - 如何在 OCaml 中定义 "apply"

javascript - 如果动态更改 URL,JQuery TouchTouch 插件不会显示照片

javascript - 垂直排序对象,对象之间留有边距空间

javascript - 动画标题应该是 flash 还是 javascript?

python - 数据帧: apply on two columns based on values