前端知库

怎样实现首沿节流,和尾沿节流有什么区别?

参考答案

节流限制连续调用的执行频率。下面是首沿版本:第一次立即执行,然后在等待窗口内丢弃后续调用。它不会在窗口结束时补执行最后一次调用,因此不能直接替代需要尾沿结果的方案。

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;
}

选择前先说明首沿、尾沿、取消和异常语义。频率限制也无法保证单次回调很快;若回调本身耗时,仍需降低计算或布局成本。后台计时器会被节流,不应依赖毫秒级准确触发。