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);
  };
}
相关推荐
脉动数据行情121 分钟前
C# 实现德指 DAX 期货 WebSocket 实时行情监听
开发语言·websocket·c#
大圣编蚕1 小时前
Java ByteArrayInputStream 详解:从入门到实战
java·开发语言·算法
菜鸟~noob2331 小时前
【电子战】第02篇:能量检测器 vs. 相关检测器【含matlab代码】
开发语言·matlab
mayaairi1 小时前
Vue2 组件通讯(三):全局事件总线、PubSub、插槽与组件实例属性
前端·javascript·vue.js
OpenAnolis小助手2 小时前
一句话看透 JVM,SysOM 诊断 Skill 新增 Java 应用诊断能力
java·开发语言·jvm·阿里云·操作系统控制台·sysom
小玮看世界2 小时前
[Python]OD算法在OD实际运用转化参考清单
开发语言·python·算法
kyriewen2 小时前
面试官问我:AI 都能写代码了,前端凭什么还值 25K
前端·javascript·人工智能
ForteScarlet2 小时前
Kotlin 2.4.20 现已发布,新特性多不多?
android·java·开发语言·开源·kotlin·jetbrains
萧瑟余晖2 小时前
Java深入解析篇六十二之安全机制详解
java·开发语言
BillKu3 小时前
全局样式变量:CSS 自定义属性(--border-color)和SCSS 变量($border-color)的说明
javascript·css·scss