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);
  };
}
相关推荐
比特森林探险记2 分钟前
Element Plus 实战指南
前端·javascript
problc7 分钟前
在 OpenClaw 里一句话记账:消费说出来,账单自动进乖猫记账 App
开发语言·python
橙露8 分钟前
Vue3 自定义指令:实战封装全局常用工具指令
开发语言
赵谨言9 分钟前
基于YOLOv5的海棠花花朵检测识别:文献综述与研究展望
大数据·开发语言·经验分享·python
FlyWIHTSKY12 分钟前
Vue3 单文件中不同的组件
前端·javascript·vue.js
历程里程碑19 分钟前
41 .UDP -3 群聊功能实现:线程池助力多客户端通信
linux·开发语言·网络·数据结构·c++·网络协议·udp
zly886537221 分钟前
windsurf rules与skill的使用
linux·c语言·开发语言·驱动开发
笨笨马甲27 分钟前
Qt network开发
开发语言·qt
不染尘.33 分钟前
排序算法详解1
开发语言·数据结构·c++·算法·排序算法
Via_Neo33 分钟前
JAVA中对数的表达,将浮点数转为保留指定位数的字符串
java·开发语言