關于定時器多次啟動/關閉問題
為什么
setTimeout連續(xù)多次觸發(fā)之后,多次clearTimeout可以停止
setInterval連續(xù)多次之后,多次clearInterval停止不了
?
<input type = "button" value = "Start" onclick="startCount">
<input type = "button" value = "Stop" onclick="stopCount">
為什么
setTimeout連續(xù)多次觸發(fā)之后,多次clearTimeout可以停止
setInterval連續(xù)多次之后,多次clearInterval停止不了
?
<input type = "button" value = "Start" onclick="startCount">
<input type = "button" value = "Stop" onclick="stopCount">
2023-11-25
舉報
2025-01-21
如果代碼你沒有進行更改的話,原代碼里i存儲的timeout的id只有最后一個觸發(fā)start函數(shù)的計時器,而其他任務都以異步調用的形式等待執(zhí)行,當他們再一次觸發(fā)回調函數(shù)的時候,i值就又存儲上計時器id了,所以會有多次點擊stop可以逐個取消掉的效果;
而setInterval的id只有調用該函數(shù)的時候才會喚起一次,而不是遞歸地調用setTimeout一樣“實時更新”變量i中存儲的id值。因此多次觸發(fā)setInterval函數(shù)后,變量i僅能存儲最后一次調用的setInterval函數(shù)的計時器id,無法再得知此前啟動的計時器id了,也就自然沒法通過clearInterval來取消掉。
如果想要保證每次啟動計時器的id都能被有效地存儲下來,可以考慮使用數(shù)組來存儲。