怎样实现首沿节流,和尾沿节流有什么区别?
参考答案
节流限制连续调用的执行频率。下面是首沿版本:第一次立即执行,然后在等待窗口内丢弃后续调用。它不会在窗口结束时补执行最后一次调用,因此不能直接替代需要尾沿结果的方案。
JavaScript
function throttle(fn, wait) {
let blocked = false;
let timer;
function wrapped(...args) {
if (blocked) return;
blocked = true;
timer = setTimeout(() => { blocked = false; }, wait);
return fn.apply(this, args);
}
wrapped.cancel = () => {
clearTimeout(timer);
blocked = false;
};
return wrapped;
}
选择前先说明首沿、尾沿、取消和异常语义。频率限制也无法保证单次回调很快;若回调本身耗时,仍需降低计算或布局成本。后台计时器会被节流,不应依赖毫秒级准确触发。