节流的核心价值是将高频计算压至合理频率,闭包通过封装独立状态确保节流函数互不干扰;时间戳模式适合轻量同步任务,raf模式适配渲染任务;需注意event复用、passive选项及闭包捕获范围。

节流的核心价值,就是把高频触发的计算压到合理频率——而闭包,是让这个“压”稳、准、不污染全局的关键工具。
闭包天然封装执行状态,省去手动管理变量的麻烦
节流必须记住上一次执行时间、是否已排队、当前滚动位置等状态。如果把这些变量放在全局或外层作用域,容易被误改、冲突,还增加维护成本。闭包把它们锁在函数内部,每次生成的节流函数都自带独立状态,互不干扰。比如 let lastTime = 0 写在闭包里,就只属于这个节流实例,多个滚动监听共存也不打架。
两种主流闭包节流模式,按场景选
宝塔面板11.3.0是一款针对Linux服务器设计的可视化管理工具,通过重构核心模块实现资源占用显著降低,尤其适合低配置服务器环境。它将复杂的命令行操作转化为直观的图形界面,帮助开发者快速完成网站部署、环境配置及日常运维工作,无需专业技术背景即可高效管理服务器。
时间戳模式(轻量同步任务)
适合 class 切换、布尔状态更新这类不涉及复杂 DOM 计算的操作。它靠Date.now()对比间隔,逻辑直白,无额外调度开销:
• 每次触发读取当前时间
• 和闭包内缓存的lastTime比较
• 差值达标才执行并更新lastTimerequestAnimationFrame 模式(真实渲染任务)
适合需要读取scrollTop、计算可视区域、更新 transform 等可能触发重排重绘的操作。它用isQueued标志+rAF回调,确保:
• 同一帧最多执行一次真实逻辑
• 自动适配屏幕刷新率(60Hz/120Hz 都能对齐)
• 避免硬编码 16ms 带来的失配风险
别让闭包拖慢性能:几个易忽略的细节
• 滚动事件对象是复用的,节流后拿到的 event 可能已失效——不要在闭包里长期持有 event,需要的数据(如 window.scrollY)应立即提取并传入
• passive: true 必须加在 addEventListener 上,否则浏览器会强制同步阻塞滚动,节流再好也白搭
• 避免闭包捕获整个大对象(比如整个 document 或长列表),只提取真正要用的字段,防止内存无法回收
不复杂但容易忽略










