前端常常会遇到间断调用事件的问题,所以节流函数和防抖函数是必不可少的。
我集体通常会在封装通用组件里包裹一层避免事件的反复调用。
节流函数
间接上代码
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] 能够看出,执行的是最初一次调用的函数。