函数节流throttle
多用于具有倒计时功能的按钮,当点击发送按钮后,开始进行倒计时,这期间无法发送,当倒计时结束后,可再次发送
常规写法:为函数添加_timer, 在发送后进行倒计时,倒计时结束后清除_timer,期间所有请求全部 return false
const throttle= (fn, duration) => {
let that = this;
if (this._timer) {
return false;
} else {
this._timer = setTimeout(() => {
that._timer=null
}, duration);
return fn();
}
};
闭包写法:思路一致,但是返回的是函数
const throttle= (fn, duration) => {
let timer = null;
let fns = () => {
if (timer) {
return false;
} else {
timer = setTimeout(() => {
timer = null;
}, duration);
return fn();
}
};
return fns;
};
函数节流debounce
多用于搜索框,当你疯狂、高频地点击,这个函数最后只会被执行一次。
常规写法:为函数添加_timer, 每次点击都先清除之前的_timer,然后重新设定定时器,以确保fn只执行一次
const debounce = (fn, duration) => {
clearTimeout(this._timer)
this._timer = setTimeout(fn,duration);
};
闭包写法:思路一致,但是返回的是函数
const debounce = (fn, duration) => {
let timer = null
let fns = () => {
clearTimeout(timer)
timer = setTimeout(fn,duration)
}
return fns
}
网友评论