1. 定义
/**
* @param {Function} [fn] [执行的函数]
* @param {Number} [delay] [延迟毫秒数]
* @param {Boolean} [isDebounce] [执行防抖还是节流]
*
* @return {Function} [返回匿名函数]
*/
function throttle(fn, delay, isDebounce) {
let timer;
let lastCall = 0;
return function(...args) {
if (isDebounce) {
if (timer) clearTimeout(timer);
timer = setTimeout(() => {
fn(...args);
}, delay);
} else {
const now = new Date().getTime();
if (now - lastCall < delay) return;
lastCall = now;
fn(...args);
}
}
}
2. 使用
const doAction = throttle((x,y)=>{console.log(x,y)},100,true)
window.onresize = () => {
doAction(1,2);
};
3. 防抖 与 节流的区别
防抖:当前时间段内只有一个处理函数
节流:过一段时间就触发一个处理函数
4. 备注
... (三个点): 多数情况下,用于扩展,也叫扩展运算符,也有聚合功能,本文中...args就是聚合功能,将外面传入的参数聚合为args数组。
对...args有疑问,请看here
网友评论