防抖与节流

一、是什么

  • 防抖(debounce):停止触发后执行一次
  • 节流(throttle):固定时间执行一次

二、为什么

优化性能:

  • 输入框搜索
  • 滚动监听
  • resize

三、实现

防抖

function debounce(fn, delay) {
  let timer = null;
  return function (...args) {
    clearTimeout(timer);
    timer = setTimeout(() => fn(...args), delay);
  };
}

节流

function throttle(fn, delay) {
  let last = 0;
  return function (...args) {
    const now = Date.now();
    if (now - last > delay) {
      fn(...args);
      last = now;
    }
  };
}

四、总结

  • 防抖:最后一次执行
  • 节流:按频率执行