亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

多次點擊start開始計時為什么還能停下來?怎么解釋?

<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>


點擊一次start按鈕,執行startCount()函數,變量i被賦值,但我在重復點擊strat按鈕重復調用startCount()函數時,變量i不應該被覆蓋上了新的值了嗎?但為什么我還能進行重復點擊stop按鈕使計數停下來?

誰能幫忙解釋一下,謝謝。


補充:

詳細流程是這樣的:

(1)我多次點擊開始按鈕,開啟了很多個setTimeout()函數進行遞歸;

(2)可以看到計數因為有多個setTimeout()運行,計數跳動的很快;

(3)我再逐個點擊停止,計數函數還是能夠逐個關閉。

問題是:變量 i 不應該是記錄我最后一次點擊開始按鈕所對應的setTimeout()函數的id嗎?之前的全部setTimeout()函數的id不應該是被覆蓋掉了嗎?為什么我還能正常的停止計數?之前被覆蓋掉的id是怎么找到的?

請指點一下謝謝。

正在回答

3 回答

你每點擊一次都會創建一個新的定時器,但是之前的定時器不會自己取消。

0 回復 有任何疑惑可以回復我~

應該是有一個計數器,記錄setTimeout()的次數,即是當setTimeout()被調用時,計數器的值加一,而調用setTimeout()這個函數的返回值正好就是這個計數器的值

而clearTimeout(i);的作用是將計數器的值減一,當計數器的值減為0時,就完全清除了setTimeout()

0 回復 有任何疑惑可以回復我~

全局變量只有一個值,這邊變了,那邊引用的也就變了

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

慕少8119580 提問者

還是不太明白,全局變量不是只有一個 i 嗎?我多次點擊了之后一個 i 應該還是指向一個setTimeout()函數ID吧,它是怎么記錄我之前點擊傳進來的setTimeout()函數ID的呢?不應該是被覆蓋掉了丟失了嗎?可是結果是我再多次點擊停止還是能停下來,為什么?
2017-03-05 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

多次點擊start開始計時為什么還能停下來?怎么解釋?

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號