В Chrome и узел, следующий код выдает ошибку:Почему применяется слишком много аргументов, чтобы вывести «Максимальный размер стека вызовов»?
function noop() {}
var a = new Array(1e6)
// Array[1000000]
noop.apply(null, a)
// Uncaught RangeError: Maximum call stack size exceeded
Я понимаю, почему это может быть плохой идеей, чтобы передать 1 миллион аргументов в функцию, но может кто-нибудь объяснить, почему ошибка Maximum call stack size exceeded
вместо что-то более актуальное?
(В случае, если это кажется несерьезным, оригинальный случай был Math.max.apply(Math, lotsOfNumbers)
, который является не-неразумным способом получить максимальное число из массива.)
... потому что аргументы функции хранятся в стеке? – Bergi
Ну, да, это часть информации, которую я отсутствовал :) – nrabinowitz