为了账号安全,请及时绑定邮箱和手机立即绑定

已经开始无限计数后再次点击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>


正在回答

6 回答

setTimeout(function(){

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

2 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~
#1

啦啦q 提问者

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

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

1 回复 有任何疑惑可以回复我~
#1

啦啦q 提问者

看懂啦,三克油~
2015-09-01 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~
#1

啦啦q 提问者

<script type="text/javascript"> var num=0; var i; function startCount(){ document.getElementById('count').value=num; num=num+1; i=setTimeout("startCount()",1000); } function stopCount(){ clearTimeout(i); } </script>
2015-08-29 回复 有任何疑惑可以回复我~
#2

啦啦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 回复 有任何疑惑可以回复我~

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

1 回复 有任何疑惑可以回复我~
#1

啦啦q 提问者

理解一些了,谢谢~
2015-08-27 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信