JS手写防抖

防抖

什么是防抖

  • 频繁触发只执行最后一次

实现代码:

javascript 复制代码
function debounce(func, wait) {
  let timeout; // 闭包变量,用于存储 setTimeout 返回的ID,保证每次调用共享同一个定时器状态
  
  // 返回一个新的函数,这个函数会在被调用时延迟执行传入的 func
  return function(...args) {  // 使用剩余参数收集所有参数,确保能传递任意数量的参数
    
    // 保存当前函数的执行上下文(this值)
    // 这是为了确保在 func 被调用时,this 指向正确
    const context = this;
    
    // 每次调用时,清除之前的定时器
    // 这样可以确保连续快速调用时,只有最后一次调用会真正执行
    clearTimeout(timeout);
    
    // 设置一个新的定时器,延迟 wait 毫秒后执行
    timeout = setTimeout(() => {
      // 方法1:使用 apply 执行原函数
      // apply 可以接收一个数组作为参数列表,适合这里的情况
      func.apply(context, args);
      
      // 或方法2:使用 call + 展开运算符
      // func.call(context, ...args); // 效果相同,但需要展开 args 数组
    }, wait);
  };
}
相关推荐
用户2986985301425 分钟前
前端 Excel 处理进阶:React 中合并与取消合并单元格的实现
前端·javascript·react.js
触底反弹31 分钟前
面试被问 RAG 只能说出六个字?这篇用 100 行 Node.js 代码帮你彻底搞懂
javascript·人工智能·面试
Highcharts33 分钟前
@highcharts/react完整技术指南|新版Highcharts React使用、迁移、SSR、TS 优化全解
前端·javascript
鱼毓屿御34 分钟前
Python 装饰器与函数调用机制(复习笔记 · 2026-07-07)
开发语言·python
浩瀚地学35 分钟前
【Java基础复习】IO流(二)
java·开发语言·经验分享·笔记·学习
gis开发之家1 小时前
vue3组合式函数(Composables)的艺术——将业务逻辑从UI组件中连根拔起
前端·javascript·vue.js·前端框架·vue3·前端工程化·前端架构
^yi1 小时前
【C++】内存管理
开发语言·c++
AC赳赳老秦1 小时前
采购专员自动化:OpenClaw 自动比价、生成询价单、跟踪供应商报价进度实战指南
开发语言·数据库·人工智能·python·自动化·github·openclaw
QiLinkOS1 小时前
QiLink OS的失败数据共享平台的运作模式是否适用于所有行业?
android·开发语言·人工智能·算法·重构·开源
CRMEB定制开发1 小时前
企业级Java电商系统选型路线图:从零到上线全流程拆解
java·开发语言·商城系统·小程序商城