定时器bug问题

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script type="text/javascript">
    var time;
    var i=0;
    function c()
    {
        time=setInterval("d()",1000)
    }
    function d()
    {
        (document.getElementById('cd')).value=i++;

    }
    function f()
    {
        clearInterval(time);
    }
    </script>
</head>
<body>
    <input id='cd' type ="button"  value ="number">
    <input type ="button"  value ="开始"  onclick="c()">
    <input type ="button"  value ="停止"  onclick="f()">
</body>
</html>

点了几次开始,数字就变得快的起来。我知道这是个bug,想知道为什么会越来越快?
希望各位大神说的详细点,新手一枚,谢谢。

阅读 4.9k
4 个回答

c() 里,如果你没清除上一次的 interval,会定义成多个,而且由于 time 被覆盖,以前定义的无法清除。稍改改就行

function c() {
    clearInterval(time);
    time = setInterval("d()", 1000);
}

c这个方法首先要清除定时器,然后再给定时器赋值,不然就相当于定义多个定时器一块运行了,所以就越来越快咯

每个定时器每秒加1,你启动的越来越的定时器,每秒增加的速度就越来越多。

我想一楼说的足够清楚了,补充一下变量只是一个用来存放值的容器,赋值只是让容器存放新的值,并不表示原有的值会消失,值在没有被清除之前会一直存在(这块涉及浏览器的清除机制包括标记清楚和引用计数可以去查阅相关文章)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题