2017-02-16 10 views
6

क्रोम और नोड में, निम्न कोड एक त्रुटि फेंकता है:"बहुत से कॉल स्टैक आकार से अधिक" फेंकने वाले कई तर्कों के साथ लागू क्यों होता है?

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) था, जो एक सरणी से अधिकतम संख्या प्राप्त करने की एक नहीं के अनुचित तरीका है।)

+0

... क्योंकि कार्य तर्क स्टैक पर संग्रहीत हैं? – Bergi

+0

खैर, हाँ, यह जानकारी का टुकड़ा है जो मैं याद कर रहा था :) – nrabinowitz

उत्तर

8

समारोह तर्क ढेर पर डाल रहे हैं। आप ढेर पर एक लाख तर्क डालने की कोशिश कर रहे हैं, और यह अधिकतम ढेर आकार से अधिक है। तो त्रुटि संदेश त्रुटि के कारण से बहुत प्रासंगिक है।

+0

किसी भी व्यक्ति के लिए अधिक विशिष्ट ब्राउज़र स्टैक आकार सीमाएं चाहते हैं, मुझे यह पता चला: http://stackoverflow.com/questions/7826992/browser-javascript-stack-size- सीमा – chrispy

संबंधित मुद्दे