1.clearTimeout(timer);
只是将定时器关闭,这里的clearTimeout只是将定时器关闭,然后下面会重新开启定时器,但timer变量本身还存在,也就是当判断 if(timer) 时为真
代码示例,防抖函数的应用
function debounce(func, delay) {
let timer;
return function (...args) {
clearTimeout(timer);
timer = setTimeout(() => {
func.apply(this, args);
});
};
}
2.timer = null
timer会被系统的垃圾回收机制回收, 无法再重新启动定时器,就是当判断 if(timer) 为假
所以当我们清除定时器时,可以先判断是否需要通过判断 if(timer) 来决定用哪个方法清除定时器
代码示例:节流函数的应用
function throttled2(func, delay) {
let timer;
return function (...args) {
if (!timer) {
timer = setTimeout(() => {
func.apply(this, args);
timer = null;
}, delay);
}
};
}