问题缘起
以下代码会输出一次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