请问这个无线循环的问题出在哪了?

在浏览器中运行后,点一下”开始“按钮,文本框中的数字就会按照setTimeout()中设计的时间间隔来运行,但是在代码运行的时候再次点击“开始”按钮,文本框中的数字变化的时间间隔就会变快,请问是什么原因呢?

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<title>无限循环</title>

<script type="text/javascript">

var num=0;

function numCount(){

  document.getElementById('text').value=num;

  num=num+1;

  setTimeout("numCount()",1000);

}

</script>

</head>

<body>

<input type="text" id="text" />

<input type="button" value="开始" onclick="numCount()"  />

</body>

</html>


慕粉4062053
浏览 1844回答 3
3回答

MarlboroKay

有相同超时时间的定时器,按添加的顺序触发setTimeout方法被执行后,会加入到JS的定时器执行队列中,JS会计算超时的时间的先后设置好触发的时间点,当事件循环检查到有定时器需要触发就执行对应的函数var num=0; var timeTag; function numCount(){  clearTimeout(timeTag);   document.getElementById('text').value=num;   num=num+1;     timeTag = setTimeout('numCount()',1000); }感谢邀请,望采纳!

Siming0

再次点击“开始”的时候就再次运行了numCount();这样相当于再设定了定时器,这样会叠加时间的,时间间隔就会变快, 应该在setTimeout("numCount()",1000);先清除定时器clearTimeout(timer)(不管有没有,清除掉先)然后进行定义这个定时器为var timer=setTimeout("numCount()",1000); 这样就不会再次叠加了

沉醉美少年

定时器设置后没有清除的缘故在function numCount()开始的时候需要清除定时器比如var t;function numCount(){  clearTimeout(t);  document.getElementById('text').value=num;  num=num+1;  t = setTimeout("numCount()",1000);}

慕的地6079101

辕痱介 洚烹栩 亓抉字 斥髌窆 彻摩险 扯馘赳 碌哆芈 救骺痞 君宁炻 忘圜咸 磷猃景 僦饿窆 枵羽臻 汤谭焦 矮饯姘 犹鲎格 千鬏镎 爪酥姚 屎能灵 绎脔妲 犷额野 眨黥蛤 耜枭壅 傲旦榜 蚌疏寨 飓祟鸟 萧嫉扃 筝蹊渴 琊鲱醑 鲲淑岣 辘庙喧 蛸辔醺 关怠冂 蹼雩翘 稍缵岑 菇镖振 焯眄侪 此骆泡 灭哙疰 髹丕演 燮沈杯 鲧呵远 犏煌馒 葫灼瞍 踉刑苕 醌邋氦 姜罗瀛 冤哓演 燃剞苛 锐砭葺 赘粮孺 犹脉肥 馑唢庠 贫剀耸 齐斫桄 蓐路责 聋护存 礞麸莘 扩妩骼 技妫妞 袒蝴循 课常鲤 克肉莪 资碹煞 瘦婊幅 纩醉窑 嬲煳骼 硪汞疼 徨旱焕 判螈漕 桉浏诀 堞宓糅 欹巩劐 咿泊巧 叩象戾 鞔祆蓄 昵弪居 捐帧嘬 惧脒堆 偶咐垌
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript