节流与防抖

2023-02-26 21:02:00

节流

节流函数:在指定时间内只执行一次

throttle.ts
          function throttle<T extends (...args: any[]) => any>(fn: T, delay: number): (...args: Parameters<T>) => ReturnType<T> | void {
 let lastTime = 0;

 return function (this: any, ...args: Parameters<T>) {
   const now = Date.now();
   if (now - lastTime >= delay) {
     lastTime = now;
     return fn.apply(this, args);
   }
 };
}

        

防抖

防抖函数:在指定时间内只执行最后一次

debounce.ts
          function debounce<T extends (...args: any[]) => any>(fn: T, delay: number): (...args: Parameters<T>) => void {
  let timer: number | null = null;

  return function (this: any, ...args: Parameters<T>) {
    if (timer) clearTimeout(timer);
    timer = setTimeout(() => {
      fn.apply(this, args);
    }, delay);
  };
}

        
© 2021-2025 sunshj's Blog