在 setTimeout 调用期间超出最大调用堆栈大小 [英] Maximum Call Stack Size Exceeded During a setTimeout Call

查看:27
本文介绍了在 setTimeout 调用期间超出最大调用堆栈大小的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图每 4 秒调用一次我的函数,这样它就会实时增加一个数字.出于某种原因,我不断收到错误消息.这是我的代码:

<头><title>回收站</title><script type="text/javascript">函数 rand(from, to){return Math.floor(Math.random() * (to - from + 1) + from);//生成随机数}var num = rand(10000, 100000);function getNum()//由页面加载触发,以便innerHTML 工作{document.getElementById('counter').innerHTML = num + 7;setTimeOut(getNum(), 4000);}<body onload="getNum()"><div id="计数器">

解决方案

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

function getNum()//由页面加载触发,以便innerHTML 工作{数量 += 7;//增加并赋值变量document.getElementById('counter').innerHTML = num;setTimeout(getNum, 4000);//<-- 正确的方法}

链接到 setTimeout 的文档.

I'm trying to call my function every 4 seconds so it will increment a number live. For some reason I keep getting errors. Here's my code:

<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>

解决方案

Inside getNum, you're directly invoking the getNum function, causing the stack to exhaust. Replace the function call getNum() with the function reference 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
}

Link to documentation of setTimeout.

这篇关于在 setTimeout 调用期间超出最大调用堆栈大小的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆