8

In Chrome and Node, the following code throws an error:

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

I understand why it might be a Bad Idea to pass 1 million arguments to a function, but can anyone explain why the error is Maximum call stack size exceeded instead of something more relevant?

(In case this seems frivolous, the original case was Math.max.apply(Math, lotsOfNumbers), which is a not-unreasonable way of getting the max number from an array.)

nrabinowitz
  • 55,314
  • 10
  • 149
  • 165

1 Answers1

12

Function arguments are put on the stack. You're trying to put a million arguments onto the stack, and that's more than the maximum stack size. So the error message is very relevant to the reason for the error.

Barmar
  • 741,623
  • 53
  • 500
  • 612
  • 2
    For anyone wanting more specific browser stack size limitations, I found this: http://stackoverflow.com/questions/7826992/browser-javascript-stack-size-limit – chrispy Feb 16 '17 at 01:38