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);
  };
}
相关推荐
ShiXZ21310 分钟前
网络调试四剑客:ping / telnet / nc / netstat 速查指令集
运维·开发语言·网络·php
码农大叔的博客12 分钟前
golang示例:switch
开发语言·后端·golang
个 人 练 习 生18 分钟前
数据结构入门:算法复杂度
开发语言·数据结构·经验分享·学习·程序人生·算法
W_3260026 分钟前
Python-OpenCV边缘检测与阈值分割:Sobel、Scharr、Laplacian、Canny、全局与自适应阈值
开发语言·图像处理·python·opencv·机器学习
其实防守也摸鱼27 分钟前
红队技能总结导图:从入门到精通的完整知识体系
开发语言·人工智能·学习·安全·web安全
聊浮游37 分钟前
JAVA2026最新全套学习资料、学习路线
java·开发语言·jvm·mysql·spring·maven·idea
程序员老赵1 小时前
Docker 部署 ZLMediaKit:轻松搭建高性能流媒体服务平台
前端·javascript·后端
拾年2751 小时前
前后端分离开发,别再"傻等"后端接口了——聊聊前端接口工程
前端·javascript·react.js
SendTomo1 小时前
SendTomo稳定传输三大核心策略
javascript·网络协议·webrtc·html5·p2p
不会代码的小猴1 小时前
4. 控件学习2
开发语言·c++·笔记·qt