问答详情
源自:8-5 计时器setTimeout()

已经开始无限计数后再次点击start按钮,计数会从原来的1s间隔变快,每多点一次就跳动的更快,这是为什么呀

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>计时器</title>
</head>
<script type="text/javascript">
  var num=0;
  function startCount() {
    document.getElementById('count').value=num;
    num=num+1;
    setTimeout(startCount,1000);
  }
</script>
</head>
<body>
<form>
<input type="text" id="count" onclick="startCount()"/>
<input type="button" value="start" onclick="startCount()"/>
</form>
</body>
</html>


提问者:啦啦q 2015-08-27 11:12

个回答

  • 烽子
    2015-09-01 10:36:47
    已采纳

    setTimeout(function(){

    },1000);   setTimeout内的方法是异步调用的,相当于开辟了新的线程,它一直在这个新线程里执行(每秒给num+1),你每多点一次就多了一个新线程在做这个操作,所以你觉得是快了(其实不是快了而是你每秒加的不是1而是你点了几次就是每秒加了几次),你可以这样写来清除一个setTimeout,var timer1 = setTimeout(funciton(){//一系列操作},1000);  clearTimeout(timer1);这样一来就相当于关闭timer1的线程,终止它不再执行。

  • zjufelix
    2015-10-16 11:08:27

    点了很多次start后, 就多了很多个timer, 而clearTimeout只能清除对应的timer, 要想全部清除点很多次start后生成的timer, 有啥子办法呢?

  • 烽子
    2015-09-01 11:05:59

    http://img.mukewang.com/55e515c10001824b12530513.jpg只有clearTimeout(对应的timer),对应的timer线程才会关闭。

  • 摩羯小宇
    2015-08-29 10:40:42

    我也是这块不太懂,还是没理解

  • 烽子
    2015-08-27 13:42:38

    点一次就多了一个 timer及(setTimeout()),点2次就会把num在1000毫秒加2 故越来越快