关于函数节流和函数防抖
on Front-End
所谓节流,就好比如果将水龙头拧紧直到水是以水滴的形式流出,这样每隔一段时间,就会有一滴水流出。也就是说预先设定一个执行周期,当调用动作的时刻大于等于执行周期才执行该动作,然后进入下一个新周期。
function throttle(fn, delay = 300) {
let canRun = true;
return function() {
if (!canRun) {
return;
}
canRun = false;
let self = this, args = arguments;
setTimeout(() => {
fn.apply(self, args);
canRun = true;
}, delay);
};
}
所谓防抖,就好比如果用手指一直按住一个弹簧,它将不会弹起直到松手为止。也就是说预先设定一个执行延迟,当调用动作的时刻大于等于执行延迟,才会执行该动作。若在这执行延迟内又调用此动作则将重新计算执行时间。
function debounce(fn, delay = 300) {
let timer = null;
return function() {
let self = this, args = arguments;
timer && clearTimeout(timer);
timer = setTimeout(() => {
fn.apply(self, args);
}, delay);
};
}