当前位置:首页 > 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…

JS如何访问react内部的数据

JS如何访问react内部的数据

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

JS奇数实现

JS奇数实现

判断数字是否为奇数 在JavaScript中,可以通过取模运算符(%)来判断一个数字是否为奇数。奇数除以2的余数为1。 function isOdd(num) { return nu…

JS实现取色

JS实现取色

使用 input[type="color"] 获取颜色值 HTML5 提供了原生颜色选择器,通过 <input type="color"> 可直接调用系统取色工具。用户选择的颜色会以十六进…

vue防抖函数实现

vue防抖函数实现

防抖函数的基本概念 防抖(Debounce)是一种优化高频触发事件的技术,确保函数在连续触发时只执行一次。常见场景包括输入框搜索、窗口大小调整等。 Vue中实现防抖的几种方式 使用Lodas…