2012-01-04 28 views
16

के दौरान पार हो गया है, मैं हर 4 सेकंड में अपने फ़ंक्शन को कॉल करने का प्रयास कर रहा हूं ताकि यह एक संख्या में लाइव हो सके। किसी कारण से मुझे त्रुटियां मिलती रहती हैं।अधिकतम कॉल स्टैक आकार एक सेटटाइमआउट कॉल

<html> 
<head> 
<title>Recycle Counter</title> 
<script type="text/javascript"> 
    function rand(from, to) 
    { 
     return Math.floor(Math.random() * (to - from + 1) + from); // Generates random number 
    } 

    var num = rand(10000, 100000); 

    function getNum() // Gets triggered by page load so innerHTML works 
    { 
     document.getElementById('counter').innerHTML = num + 7; 
     setTimeOut(getNum(), 4000); 
    } 
</script> 
</head> 
<body onload="getNum()"> 
    <div id="counter"> 

    </div> 
</body> 
</html> 
+1

आपको पता है कि आपके समारोह getNum() एक अंतहीन पुनरावर्ती पाश सही में फंस जाएगा? –

उत्तर

32

getNum के अंदर, आप सीधे getNum समारोह, लागू कर रहे हैं ढेर निकास के कारण: यहाँ मेरी कोड है। समारोह संदर्भ getNum साथ समारोह कॉल getNum() बदलें: setTimeout के प्रलेखन के लिए

function getNum() // Gets triggered by page load so innerHTML works 
{ 
    num += 7;  // Increase and assign variable 
    document.getElementById('counter').innerHTML = num; 
    setTimeout(getNum, 4000); // <-- The correct way 
} 

लिंक।

+1

हा! हाँ, जो त्रुटि से छुटकारा पा लिया लेकिन इससे वृद्धि में वृद्धि नहीं हुई। इमा इसे धन्यवाद रखो! –

+1

अब यह बढ़ता है। आपको 'num' चर असाइन करना होगा। –

0

आप setTimeout अंदर वाक्य रचना गलती है

setTimeOut(getNum(), 4000); getNum उम्मीद है कि यह एक कोड प्राप्त होगा निष्पादित करने के लिए (और यह यह recursievly काम हो जाएगा)

सही रास्ता setTimeOut('getNum()', 4000); या setTimeOut(function() { getNum(); }, 4000);

+5

उद्धरणों में इसे रखना *** *** सही तरीका नहीं है। – SomeKittens

8

समस्या है फोन करेंगे setTimeout पर आपका कॉल निष्पादन के लिए शेड्यूल करने के बजाय getNum का आह्वान कर रहा है। इससे अनंत रिकर्सन और स्टैक ओवरफ्लो होता है। प्रयास करें बजाय निम्नलिखित

setTimeout(getNum, 4000); 
+9

+1: हाँ, यह निश्चित रूप से उसे ले जाता है ... ढेर ओवरफ्लो! :] – trejder

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