两个timer实现js节流函数
用两个timer做一个函数调用节流器,不需要更多的逻辑,保证第一次调用和每间隔timeout时间后被触发和最后一次的调用被触发;
// js 节流函数实现
function throttle(func, timeout) {
let headTimer = null;
let tailTimer = null;
let context = null;
let args = null;
return function () {
context = this;
args = arguments;
//lihx 保证第一次及后续timeout时间后依次触发调用;
if (!headTimer) {
headTimer = setTimeout(() => {
func.apply(context, args);
headTimer = null;
}, timeout);
} else {
//lihx 保证最后一次调用被触发,但不保证headTimer与tailTimer有timeout时间间隔;
if (tailTimer) {
clearTimeout(tailTimer);
}
tailTimer = setTimeout(() => {
func.apply(context, args);
tailTimer = null;
}, timeout);
}
}
}