2017-02-16 4 views
6

は、次のコードは、エラーがスローされます:引数が多すぎると「最大呼び出しスタックサイズを超えました」が適用されるのはなぜですか? Chromeとノードで

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の代わりである理由を誰もが説明できる理由を私は理解してより関連性の高い何か?

(場合、これは軽薄なようで、オリジナルのケースがarrayから最大数を取得する、不合理ではない方法である、Math.max.apply(Math, lotsOfNumbers)でした。)

+0

...関数の引数がスタックに格納されているためですか? – Bergi

+0

さて、はい、それは私が逃していた情報の一部です:) – nrabinowitz

答えて

8

関数の引数はスタックに置かれています。 100万の引数をスタックに入れようとしています。スタックの最大サイズを超えています。したがって、エラーメッセージはエラーの理由と非常に関連しています。

+0

より具体的なブラウザのスタックサイズの制限を望む人のために、私はこれを見つけた:http://stackoverflow.com/questions/7826992/browser-javascript-stack-size-限界 – chrispy

関連する問題