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>
22
3
getNum
の内部では、
getNum関数を直接呼び出しているため、スタックを使い果たしてしまいます。関数呼び出し
getNum()を関数参照
getNum` に置き換えてください。問題は
setTimeout
の呼び出しが、実行のためのスケジューリングではなく、getNum
を呼び出していることです。 これは、無限の再帰とスタックオーバーフローを引き起こします。 代わりに次のようにしてください。setTimeOut
は
setTimeout` でなければならない。