多次點擊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按鈕,執(zhí)行startCount()函數(shù),變量i被賦值,但我在重復(fù)點擊strat按鈕重復(fù)調(diào)用startCount()函數(shù)時,變量i不應(yīng)該被覆蓋上了新的值了嗎?但為什么我還能進(jìn)行重復(fù)點擊stop按鈕使計數(shù)停下來?
誰能幫忙解釋一下,謝謝。
補充:
詳細(xì)流程是這樣的:
(1)我多次點擊開始按鈕,開啟了很多個setTimeout()函數(shù)進(jìn)行遞歸;
(2)可以看到計數(shù)因為有多個setTimeout()運行,計數(shù)跳動的很快;
(3)我再逐個點擊停止,計數(shù)函數(shù)還是能夠逐個關(guān)閉。
問題是:變量 i 不應(yīng)該是記錄我最后一次點擊開始按鈕所對應(yīng)的setTimeout()函數(shù)的id嗎?之前的全部setTimeout()函數(shù)的id不應(yīng)該是被覆蓋掉了嗎?為什么我還能正常的停止計數(shù)?之前被覆蓋掉的id是怎么找到的?
請指點一下謝謝。
2017-04-05
你每點擊一次都會創(chuàng)建一個新的定時器,但是之前的定時器不會自己取消。
2017-03-21
應(yīng)該是有一個計數(shù)器,記錄setTimeout()的次數(shù),即是當(dāng)setTimeout()被調(diào)用時,計數(shù)器的值加一,而調(diào)用setTimeout()這個函數(shù)的返回值正好就是這個計數(shù)器的值
而clearTimeout(i);的作用是將計數(shù)器的值減一,當(dāng)計數(shù)器的值減為0時,就完全清除了setTimeout()
2017-03-05
全局變量只有一個值,這邊變了,那邊引用的也就變了