在setTimeout调用期间超过最大调用堆栈大小

时间:2012-01-04 18:17:14

标签: javascript html time

我试图每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>

3 个答案:

答案 0 :(得分:41)

getNum内,你直接调用getNum函数,导致堆栈耗尽。将函数调用getNum()替换为函数引用getNum

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
}

链接到setTimeout的文档。

答案 1 :(得分:10)

问题是您对setTimeout的调用正在调用getNum而不是将其安排执行。这导致无限递归和堆栈溢出。请尝试以下

setTimeout(getNum, 4000);

答案 2 :(得分:4)

setTimeOut应为setTimeout