1.防抖:
防抖:触发高频事件后n秒内函数只会执行一次,如果n秒内高频事件再次被触发,则重新计算时间。
防抖实现方式:每次触发事件时设置一个延迟调用方法,并且取消之前的延时调用方法
function debounce(fun, delay) {
let timer;
let context = this;
let args = arguments;
return function () {
if (timer) { clearTimeout(timer); }
timer = setTimeout(function () {
fun.apply(context, args);
}, delay)
}
}
2.节流
节流:高频事件触发,但在n秒内只会执行一次,所以节流会稀释函数的执行频率。
节流实现方式:每次触发事件时,如果当前有等待执行的延时函数,则直接return
function throttle(fun,wait) {
let flag = true;
let context = this;
let args = arguments;
return function () {
if (!flag) return;
flag = false;
setTimeout(() => {
fun.apply(this, arguments);
flag = true;
}, wait);
};
}