問題緣起
以下代碼會輸出一次click。一開始我以為既然已經停止了,為什么還會產生呢。
var timer;
timer=setTimeout(function(){
console.log("click")
},1000)
timer=setTimeout(function(){
console.log("click")
},1000)
clearTimeout(timer);
原理
實際上原理就是因為timer是一個指向setTimeout新線程中的引用。而clearTimeout會根據引用找到相應的線程中的方法,然后清除掉。
當你第二次給timer賦值時,引用的指向已經變了。clearTimeout并沒有清除第一次的setTimeout