前端常常会遇到间断调用事件的问题,所以节流函数和防抖函数是必不可少的。
我集体通常会在封装通用组件里包裹一层避免事件的反复调用。
节流函数
间接上代码
function throttle(fn, delay) {
let running = true;
return function () {if (running) {fn.apply(this, arguments);
console.log("arguments", arguments[0]);
running = false;
setTimeout(() => {running = true;}, delay);
}
};
}
function needThrottle() {console.log("hihihi");
}
const test = throttle(needThrottle, 200);
test(1);
test(2);
test(3);
通过打印出的 arguments[0] 能够看出,执行的是第一次调用的函数。
防抖函数
function debounce(fn, delay) {
let timer = null;
return function () {if (timer) {clearTimeout(timer);
}
timer = setTimeout(() => {fn.apply(this, arguments);
console.log('arguments',arguments[0]);
timer = null;
}, delay);
};
}
const debounced = debounce(() => console.log("hi"));
debounced(1);
debounced(2);
debounced(3);
通过打印出的 arguments[0] 能够看出,执行的是最初一次调用的函数。