经常使用 setTimeout,并且自己认为也算比较熟悉这个函数的用法。
不过今天碰到了,突然发现自己没有意识到这个问题。于是作为一个记录点,进行巩固一下。
var timer = window.setTimeout(function(){ console.log("this is setTimeout"); console.log(timer); }, 1000);
这里我并没有直接写出答案。此处并不是一个面试题之类的。因为经常需要用到。如下的写法
if (timer) { window.clearTimeout(timer); }
console.log(clearRet); console.log(timer);
此处会去清空 timeout,虽然进行了clearTimeout,但是 timer 还是有值的。 是一个具体的number
因为第一次初始化的时候, timer 就已经有了。只是通过此 number(timeout的句柄)进行了 clear;
所以还需要进行如下的赋值,才是正确的写法。
window.clearTimeout(timer); timer = null;
此时,进行 if (timer) 的判断才是较为合理的。
此处只是一个小细节,但是经常会忽略,导致一些意想不到的问题。