当前位置:首页 > JavaScript

JS节流和防抖的实现

2026-04-05 02:14:40JavaScript

节流(Throttle)的实现

节流确保函数在指定时间间隔内最多执行一次,适用于高频触发但需要限制执行频率的场景,如滚动事件。

时间戳版本
通过比较当前时间与上一次执行时间决定是否触发:

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

定时器版本
利用定时器延迟执行,确保间隔内仅有一个待执行任务:

function throttle(fn, delay) {
  let timer = null;
  return function(...args) {
    if (!timer) {
      timer = setTimeout(() => {
        fn.apply(this, args);
        timer = null;
      }, delay);
    }
  };
}

防抖(Debounce)的实现

防抖在连续触发时重置计时,直到停止触发后延迟执行,适用于输入框搜索联想等场景。

基础版本
延迟执行函数,若重复触发则清除旧定时器:

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

立即执行版本
首次触发立即执行,后续触发需等待延迟:

JS节流和防抖的实现

function debounce(fn, delay, immediate = false) {
  let timer = null;
  return function(...args) {
    if (timer) clearTimeout(timer);
    if (immediate && !timer) {
      fn.apply(this, args);
    }
    timer = setTimeout(() => {
      timer = null;
      if (!immediate) fn.apply(this, args);
    }, delay);
  };
}

使用场景对比

  • 节流:适用于规律性限制执行频率,如窗口调整、滚动事件。
  • 防抖:适用于连续触发后只需最终结果,如输入验证、搜索建议。

两种方法均可通过闭包保存状态,注意this绑定和参数传递。实际开发中可结合需求选择或使用Lodash等库的优化实现。

标签: 防抖JS
分享给朋友:

相关文章

vue实现防抖节流

vue实现防抖节流

Vue 中实现防抖与节流 防抖(Debounce)和节流(Throttle)是前端开发中常用的性能优化技术,用于控制事件触发的频率。以下是它们在 Vue 中的实现方法。 防抖(Debounce) 防…

vue的防抖实现

vue的防抖实现

Vue 防抖实现方法 在Vue中实现防抖(debounce)可以通过以下几种方式完成: 使用Lodash库的debounce方法 安装Lodash: npm install lodash…

vue如何实现防抖

vue如何实现防抖

Vue 防抖的实现方法 在Vue中实现防抖(debounce)可以通过以下几种方式,根据不同的使用场景选择合适的方法。 使用 Lodash 的 debounce 函数 Lodash 是一个流行的 J…

JS如何调用react组件

JS如何调用react组件

调用React组件的常见方法 在JavaScript中调用React组件通常涉及以下几种场景和方式: 直接渲染组件 通过ReactDOM.render()方法将组件渲染到DOM节点: import…

React如何使用防抖

React如何使用防抖

防抖的基本概念 防抖(Debounce)是一种限制函数执行频率的技术,确保函数在连续触发时只执行一次。在React中,常用于输入框搜索、窗口大小调整等高频事件场景。 使用Lodash实现防抖 Lod…

JS如何访问react内部的数据

JS如何访问react内部的数据

访问 React 组件内部数据的方法 在 React 中,组件内部的数据通常通过 state 或 props 管理。以下是几种常见的访问方式: 通过 state 访问数据 React 组件的内部状态…