慕粉4062053
2016-12-13 20:09:05
在瀏覽器中運行后,點一下”開始“按鈕,文本框中的數字就會按照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>
3 回答
已采納

MarlboroKay
TA貢獻189條經驗 獲得超236個贊
有相同超時時間的定時器,按添加的順序觸發
setTimeout方法被執行后,會加入到JS的定時器執行隊列中,JS會計算超時的時間的先后設置好觸發的時間點,當事件循環檢查到有定時器需要觸發就執行對應的函數
var?num=0; var?timeTag; function?numCount(){ ?clearTimeout(timeTag); ??document.getElementById('text').value=num; ??num=num+1; ? ??timeTag?=?setTimeout('numCount()',1000); }
感謝邀請,望采納!
點擊展開后面1條

Siming0
TA貢獻16條經驗 獲得超32個贊
再次點擊“開始”的時候就再次運行了numCount();這樣相當于再設定了定時器,這樣會疊加時間的,時間間隔就會變快,?應該在setTimeout("numCount()",1000);先清除定時器clearTimeout(timer)(不管有沒有,清除掉先)然后進行定義這個定時器為var timer=setTimeout("numCount()",1000); 這樣就不會再次疊加了

沉醉美少年
TA貢獻24條經驗 獲得超11個贊
定時器設置后沒有清除的緣故
在function numCount()開始的時候需要清除定時器
比如
var t;
function numCount(){
??clearTimeout(t);
? document.getElementById('text').value=num;
? num=num+1;
? t = setTimeout("numCount()",1000);
}

慕的地6079101
TA貢獻3593條經驗 獲得超0個贊
轅痱介
洚烹栩
亓抉字
斥髕窆
徹摩險
扯馘赳
碌哆羋
救骺痞
君寧炻
忘圜咸
磷獫景
僦餓窆
枵羽臻
湯譚焦
矮餞姘
猶鱟格
千鬏镎
爪酥姚
屎能靈
繹臠妲
獷額野
眨黥蛤
耜梟壅
傲旦榜
蚌疏寨
颶祟鳥
蕭嫉扃
箏蹊渴
琊鯡醑
鯤淑岣
轆廟喧
蛸轡醺
關怠冂
蹼雩翹
稍纘岑
菇鏢振
焯眄儕
此駱泡
滅噲疰
髹丕演
燮沈杯
鯀呵遠
犏煌饅
葫灼瞍
踉刑苕
醌邋氦
姜羅瀛
冤嘵演
燃剞苛
銳砭葺
贅糧孺
猶脈肥
饉嗩庠
貧剴聳
齊斫桄
蓐路責
聾護存
礞麩莘
擴嫵骼
技媯妞
袒蝴循
課常鯉
克肉莪
資碹煞
瘦婊幅
纊醉窯
嬲煳骼
硪汞疼
徨旱煥
判螈漕
桉瀏訣
堞宓糅
欹鞏劐
咿泊巧
叩象戾
鞔祆蓄
昵弳居
捐幀嘬
懼脒堆
偶咐垌
添加回答
舉報
0/150
提交
取消