2012-01-04 17 views
16

Her 4 saniyede bir işlevimi aramaya çalışıyorum, böylece bir sayıyı canlı olarak artıracaktır. Bazı nedenlerden dolayı hata almaya devam ediyorum.Maksimum Çağrı Yığını Boyutu Aşıldı Bir setTimeout Çağrısı Sırasında

<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

olmalıdır? –

cevap

32

getNum içinde, doğrudan yığın tüketmek neden getNum fonksiyonu çağıran ediyoruz: İşte benim kod. fonksiyon referans getNum ile işlev çağrısı getNum() değiştirin: setTimeout belgelerine

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 
} 

Linki.

+1

Ha! Evet, bu hatayı ortadan kaldırmış, ancak bunu artmaya başlamıştı. Ima, teşekkürler! –

+1

Şimdi artıyor. 'Num' değişkenini atamanız gerekir. –

0

Sen setTimeout içine sözdizimi hata var

setTimeOut(getNum(), 4000); (Ve recursievly yapacak)

Doğru yolu setTimeOut('getNum()', 4000); veya setTimeOut(function() { getNum(); }, 4000);

+5

Tırnak içine koymak *** doğru değil ***. – SomeKittens

8

sorundur o yürütmek için bir kod dönecektir bekliyor getNum arayacak setTimeout numaralı çağrı, yürütme için zamanlamak yerine getNum çağırıyor. Bu sonsuz yineleme ve bir yığın taşmasına yol açar. Deneyin yerine aşağıdaki

setTimeout(getNum, 4000); 
+9

+1: Evet, kesinlikle onu yönlendirir ... Yığın Taşması! :] – trejder

3

setTimeOut Sen fonksiyon getNum() sonsuz bir özyinelemeli döngü sağ sıkışmış alacak fark setTimeout

İlgili konular