W Chrome i Węzła poniższy kod generuje błąd:Dlaczego zastosowanie ze zbyt dużą liczbą argumentów powoduje "Przekroczono maksymalny rozmiar stosu wywołań"?
function noop() {}
var a = new Array(1e6)
// Array[1000000]
noop.apply(null, a)
// Uncaught RangeError: Maximum call stack size exceeded
rozumiem, dlaczego to może być zły pomysł, aby przekazać 1 milion argumentów do funkcji, ale może ktoś wyjaśnić, dlaczego błąd jest Maximum call stack size exceeded
zamiast coś bardziej istotnego?
(W przypadku, gdy wydaje się niepoważne, oryginalny sprawa była Math.max.apply(Math, lotsOfNumbers)
, która jest nie-rozsądnym sposobem na uzyskanie numeru z tablicy max.)
... ponieważ argumenty funkcji są przechowywane na stosie? – Bergi
Cóż, tak, to jest informacja, której mi brakowało :) – nrabinowitz