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

来源:8-5 计时器setTimeout()

啦啦q

2015-08-27 11:12

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


写回答 关注

5回答

  • 烽子
    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, 有啥子办法呢?

    啦啦q

    我觉得可以直接在startCount()函数中加入document.getElementById('btn').disabled="disabled";使得函数在执行过程中start按钮不可用,这种开多个timer的状态本身就是bug,应该避免

    2015-10-16 21:21:38

    共 1 条回复 >

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

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

    啦啦q

    看懂啦,三克油~

    2015-09-01 17:16:01

    共 1 条回复 >

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

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

    啦啦q

    <form> <input type="text" id="count" /> <input type="button" value="Start" onclick="startCount()" /> <input type="button" value="Stop" onclick="stopCount()" /> </form> 假如点5次start,就要点5次stop才能完全停止,我觉得就是点一次就加一个startCount()在执行了,每隔1000ms每个startCount()函数同时给计数上加1,假如点开了5个startCount()那么每1000ms就加了5,我暂时是这么理解的

    2015-08-29 11:22:49

    共 2 条回复 >

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

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

    啦啦q

    理解一些了,谢谢~

    2015-08-27 21:57:07

    共 1 条回复 >

JavaScript进阶篇

本课程从如何插入JS代码开始,带您进入网页动态交互世界

468061 学习 · 21891 问题

查看课程

相似问题