Максимальный размер стека вызовов во время вызова 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>
Ответы
Ответ 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);