关于节流和防抖的定时器中timer设为null?

来源:11-2 事件绑定和事件冒泡

慕用0863198

2020-02-06

// 节流函数
export const throttle = (func, delay = 100) => {
let timer = null;

return function (…args) {
if(timer) {
return
}
timer = setTimeout(() => {
func.apply(this, args)
timer = null
}, delay)
}
}
// 防抖函数
export const debounce = (func, delay = 200) => {
let timer = null

return function (…args) {
timer && clearTimeout(timer);
timer = setTimeout(() => {
func.apply(this, args)
timer = null
}, delay);
};
};

请问在节流和防抖的settimeout中为什么要设置timer = null,这样设置的话在函数一开始对timer的判断岂不是没有意义,会每次都执行settimeout这个函数

写回答

1回答

双越

2020-02-06

let timer = null; 和 let timer; 是一样的啊,只不过后者是 unndefined 。

timer 在后面会被赋值的,不会一直是 null 。你可以在 if(timer) 前面加一行 console.log(timer),然后执行看一下。应该就能清晰很多。

1
3
慕用0863198
非常感谢!
2020-02-06
共3条回复

一天时间高效准备前端技术一面 匹配大厂面试要求

针对时下面试高频考点,帮助新人js面试快速通关

4694 学习 · 1681 问题

查看课程