希望能夠詳細的講解下clearTimeout(tc) 為什么就能把最后一個setTimeout給清除?
2 回答

智慧大石
TA貢獻1946條經驗 獲得超3個贊
因為js沒有塊級作用域,只有全局作用域和函數作用域。所以,代碼實際上是這樣:
function fn1() { var ts, i; for(i = 0; i < 4; i++) { tc = setTimeout(function(i) { console.log(i); clearTimeout(ts); }, 10, i); } }
而且,for循環先被執行完,才開始執行定時器。所以,不存在各個定時器使用對應的ts臨時值的情況,它們使用的都是ts最終的值。也就是:每個定時器中ts都指向了原fn1函數的ts,而此時ts的值是最后一個定時器,也就是第四個定時器。因此,在第一個定時器執行后,第四個定時器就被清除了。
添加回答
舉報
0/150
提交
取消