节流 - 指定时间内只触发一次
防抖 - 只执行最后一次触发
let fn = (args) => {
console.log(`exec fn ${args}`)
}
let intervalEvent = setInterval(() => {
fn('普通执行');
debounce(fn, 1000);
throttle(fn, 1000);
}, 100);
setTimeout(() => {
clearInterval(intervalEvent)
}, 5000);
let debounce = (fn, delay) => {
fn.id && clearTimeout(fn.id);
fn.id = setTimeout(() => {
fn.call(this, '防抖')
}, delay);
}
let throttle = (fn, delay) => {
if (fn.throttleId) {
return;
}
fn.throttleId = setTimeout(() => {
fn.call(this, '节流');
clearTimeout(fn.throttleId);
fn.throttleId = null;
}, delay);
}
输出
exec fn 普通执行
exec fn 普通执行
exec fn 普通执行
exec fn 普通执行
exec fn 普通执行
exec fn 普通执行
exec fn 普通执行
exec fn 普通执行
exec fn 普通执行
exec fn 普通执行
exec fn 普通执行
exec fn 节流
exec fn 普通执行
exec fn 普通执行
exec fn 普通执行
exec fn 普通执行
exec fn 普通执行
exec fn 普通执行
exec fn 普通执行
exec fn 普通执行
exec fn 普通执行
exec fn 普通执行
exec fn 节流
exec fn 普通执行
exec fn 普通执行
exec fn 普通执行
exec fn 普通执行
exec fn 普通执行
exec fn 普通执行
exec fn 普通执行
exec fn 普通执行
exec fn 普通执行
exec fn 普通执行
exec fn 节流
exec fn 普通执行
exec fn 普通执行
exec fn 普通执行
exec fn 普通执行
exec fn 普通执行
exec fn 普通执行
exec fn 普通执行
exec fn 普通执行
exec fn 普通执行
exec fn 普通执行
exec fn 节流
exec fn 普通执行
exec fn 普通执行
exec fn 普通执行
exec fn 普通执行
exec fn 普通执行
exec fn 普通执行
exec fn 普通执行
exec fn 普通执行
exec fn 节流
exec fn 防抖
防抖只执行最后一次触发, 节流间隔执行