課程
/前端開發
/JavaScript
/JavaScript進階篇
我點擊了多次setTimeout()之后啟動了多個計時器,但是每次都賦值給了i變量,按常理來說不應該覆蓋變量所指向的計時器嗎?
為什么我點擊多次clearTimeout()之后計數增加確實變慢了,而且最后停了,這說明確實把每一個計數器都給刪除了呀。但是清除的是i變量指向的那個計數器呀。這里不太明白,為什么明明覆蓋了i所指向的計數器了執行清除方法之后還能一個個的清除計數器
2017-06-07
源自:JavaScript進階篇 8-6
正在回答
setTimeout("startCount()",1000);
這個返回的是一個計時器的id,每一個計時器在執行的時候都會有自己的ID,就是沒有這個返回值,這個計時器也會運行下去,你覆蓋的只是i只是這個變量,你不能做到覆蓋計時器,為什么能做到清理計時器,是因為,不斷有新的函數生成新的setTimeout, i的值也在變化,當你點擊取消函數的時候,setTimeout會等這個取消函數執行過以后一秒才開始執行(即使這個取消函數執行時間可以忽略不計),這時候就會把下一秒將要執行的這個i給取消掉,(但是只會取消一個,因為當時的i值是唯一的)
勾子
慕勒7123956 回復 勾子
勾子 回復 慕勒7123956
沫荼 提問者
慕勒7123956 回復 沫荼 提問者
舉報
本課程從如何插入JS代碼開始,帶您進入網頁動態交互世界
4 回答關于removechild清除的次數問題
2 回答關于clearTimeout(i-1);
3 回答關于筆記的問題
2 回答關于筆記的問題
1 回答關于刪除節點的問題
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2017-06-08
這個返回的是一個計時器的id,每一個計時器在執行的時候都會有自己的ID,就是沒有這個返回值,這個計時器也會運行下去,你覆蓋的只是i只是這個變量,你不能做到覆蓋計時器,為什么能做到清理計時器,是因為,不斷有新的函數生成新的setTimeout, i的值也在變化,當你點擊取消函數的時候,setTimeout會等這個取消函數執行過以后一秒才開始執行(即使這個取消函數執行時間可以忽略不計),這時候就會把下一秒將要執行的這個i給取消掉,(但是只會取消一個,因為當時的i值是唯一的)