如何在 JavaScript 中实现防抖和节流?

下面给你最常用、最标准、直接可复制的防抖 & 节流实现,附带使用示例,一看就会。


1. 防抖(Debounce)

原理 :频繁触发时,只在最后一次触发后延迟执行,中间全部忽略。

最简实现

ini 复制代码
function debounce(fn, delay = 300) {
  let timer = null;

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

使用示例(搜索框)

javascript 复制代码
const onSearch = debounce((value) => {
  console.log("请求搜索:", value);
}, 500);

input.addEventListener("input", (e) => {
  onSearch(e.target.value);
});

2. 节流(Throttle)

原理 :固定时间内只执行一次,不管触发多频繁。

时间戳版(立即执行,更常用)

ini 复制代码
function throttle(fn, interval = 300) {
  let lastTime = 0;

  return function (...args) {
    const now = Date.now();
    if (now - lastTime >= interval) {
      fn.apply(this, args);
      lastTime = now;
    }
  };
}

使用示例(滚动)

javascript 复制代码
const handleScroll = throttle(() => {
  console.log("滚动位置", window.scrollY);
}, 300);

window.addEventListener("scroll", handleScroll);

3. 带立即执行的防抖(可选)

有些场景希望第一次立即执行,后面再防抖:

ini 复制代码
function debounceImmediate(fn, delay = 300) {
  let timer = null;

  return function (...args) {
    const isFirst = !timer;

    clearTimeout(timer);
    timer = setTimeout(() => {
      timer = null;
    }, delay);

    if (isFirst) {
      fn.apply(this, args);
    }
  };
}

4. 快速记忆

  • 防抖:等你停手再执行 → 搜索框、输入验证、按钮防重复点击
  • 节流:冷却时间 → 滚动、拖拽、resize、高频点击

需要我给你写一个带取消功能、支持立即执行、兼容 React 的高级版防抖节流吗?

相关推荐
Smoothcloud润云18 小时前
从“预测下一个词”到“预测下一个世界状态”:世界模型作为AGI新范式的深度分析报告
人工智能·测试工具·微服务·容器·github·状态模式·agi
CoovallyAIHub21 小时前
ICLR 2026 | VLM自己学会调检测器:VTool-R1用强化学习教视觉模型使用工具推理
算法·架构·github
CoovallyAIHub21 小时前
RK3588上111 FPS:轻量YOLOv8+异步视频处理系统实现无人机自主电力巡检
算法·架构·github
逛逛GitHub1 天前
一个饺子馆在 GitHub 上开源了自己的 Skill。 北京海淀,杏坛路,北京邮电大学旁边,有一家快 20 年的饺子馆——金谷园。 好像几乎所有的北邮小伙
github
CoderJia程序员甲1 天前
GitHub 热榜项目 - 日榜(2026-04-13)
ai·大模型·github·ai教程
BothSavage1 天前
OpenHarness源码研究-1-配置打包管理
github
FreeBuf_1 天前
黑客滥用 GitHub 和 GitLab 托管恶意软件并实施凭证钓鱼攻击
gitlab·github
三无推导1 天前
GitHub爆火项目ChinaTextbook——开源如何重新定义教育普惠的边界
学习·开源·github
韩数1 天前
为了能同时开发多个项目,我烧了几亿 token 开源了一个轻量级 AI-Native IDE
后端·程序员·github
硬汉嵌入式1 天前
GitHub Copilot for Eclipse 即将开源
eclipse·github·copilot