函数防抖(debounce)和函数节流(throttle)都是为了缓解函数频繁调用,它们类似,但有区别bash
如上图,一条竖线表明一次函数调用,函数防抖是间隔超过必定时间后才会执行,函数节流是必定时间段内只执行一次。app
function debounce(fn, delay) {
let timer = null;
return function () {
if (timer) clearTimeout(timer);
timer = setTimeout(() => {
fn.apply(this, arguments);
}, delay);
}
}
复制代码
function throttle(fn, cycle) {
let start = Date.now();
let now;
let timer;
return function () {
now = Date.now();
clearTimeout(timer);
if (now - start >= cycle) {
fn.apply(this, arguments);
start = now;
} else {
timer = setTimeout(() => {
fn.apply(this, arguments);
}, cycle);
}
}
}
复制代码
lodash
对这两个方法的实现更灵活一些,有第三个参数,能够去参观学习。函数
欢迎关注个人微博@狂刀二学习