【问题标题】:Why does apply with too many arguments throw "Maximum call stack size exceeded"?为什么应用太多参数会抛出“超出最大调用堆栈大小”?
【发布时间】:2017-07-04 22:10:59
【问题描述】:

在 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),这是从数组中获取最大数的一种不合理的方式。)

【问题讨论】:

  • ...因为函数参数存储在堆栈中?
  • 嗯,是的,这就是我丢失的信息 :)

标签: javascript function apply


【解决方案1】:

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

【讨论】:

猜你喜欢
  • 2014-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-24
  • 2015-12-29
  • 2017-12-27
  • 2020-12-06
相关资源
最近更新 更多