Максимальный размер стека вызовов во время вызова setTimeout - программирование
Подтвердить что ты не робот

Максимальный размер стека вызовов во время вызова setTimeout

Я пытаюсь вызвать свою функцию каждые 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>
4b9b3361

Ответ 1

Внутри 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.

Ответ 2

Проблема заключается в том, что ваш вызов setTimeout вызывает getNum вместо планирования на выполнение. Это приводит к бесконечной рекурсии и переполнению стека. Попробуйте вместо этого

setTimeout(getNum, 4000);

Ответ 3

setTimeOut должен быть setTimeOut

Ответ 4

У вас есть синтаксическая ошибка внутри setTimeout

setTimeOut(getNum(), 4000); Позвонит getNum, ожидая, что он вернет код для выполнения (и он сделает это рекурсивно)

Правильный способ: setTimeOut('getNum()', 4000); или setTimeOut(function() { getNum(); }, 4000);