多次點擊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是怎么找到的?
請指點一下謝謝。
2017-04-05
你每點擊一次都會創建一個新的定時器,但是之前的定時器不會自己取消。
2017-03-21
應該是有一個計數器,記錄setTimeout()的次數,即是當setTimeout()被調用時,計數器的值加一,而調用setTimeout()這個函數的返回值正好就是這個計數器的值
而clearTimeout(i);的作用是將計數器的值減一,當計數器的值減為0時,就完全清除了setTimeout()
2017-03-05
全局變量只有一個值,這邊變了,那邊引用的也就變了