useThrottle

76 阅读1分钟

背景

有些函数我们不希望短时间内执行太多次,比如移动端点击按钮,性能消耗大的函数

准备

  • 需要执行的函数-fn,传入触发间隔-time
  • 每time秒内最多触发一次
  • 返回一个被节流的函数

实现

function throttle(fn, time) {
  let isWating;
  return function throttleFn() {
    if (isWating) {
    } else {
      fn(...arguments);
      isWating = true;
      setTimeout(() => {
        isWating = false;
      }, time);
    }
  };
}

拓展1

上面的demo是间隔的初期执行函数的,如果希望是间隔的后期执行函数呢?

function throttle(fn, time) {
  let isWating;
  return function throttleFn() {
    if (isWating) {
    } else {
      isWating = true;
      setTimeout(() => {
        isWating = false;
        fn(...arguments);
      }, time);
    }
  };
}

总结

本质为配置一个函数的锁