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); } }; }