如何实现javascript节流和防抖_它们分别适用什么场景

老枫大大_9008

老枫大大_9008

2025-12-26

332人浏览

原创

节流是在固定时间间隔内最多执行一次,适用于滚动监听等需匀速响应的场景;防抖是在最后一次触发后延迟执行,适用于搜索输入等需等待用户操作稳定的场景。

如何实现javascript节流和防抖_它们分别适用什么场景

节流(Throttle)和防抖(Debounce)是前端处理高频事件(如 resize、scroll、input、click)的两种核心优化策略,目的都是减少函数执行频次,避免性能问题或重复请求。它们逻辑不同,适用场景也明显区分。

节流:固定时间间隔内最多执行一次

节流确保函数在指定时间窗口内,**至少执行一次,但不超过一次**。常用于需要“匀速响应”的场景,比如滚动监听、鼠标拖拽、Canvas 动画等——既要反馈及时,又不能太密集。

  • 实现思路:用一个标志位或时间戳记录上一次执行时间;触发时判断距上次执行是否已超阈值,是则执行并更新时间,否则跳过
  • 常见写法有定时器版(较易理解)和时间戳版(更精准)
  • 示例:监听 window.onscroll 做懒加载,每 100ms 最多检查一次可视区域,避免滚动过程中反复计算

防抖:最后一次触发后延迟执行,中间触发会重置计时

防抖把多次连续触发“压缩”成一次,在停止触发后的延迟时间后才真正执行。适合“等用户停下来再干活”的场景,比如搜索框输入联想、表单校验、窗口尺寸最终调整完成等。

  • 实现关键:每次触发都清除前一个定时器,重新设置新定时器
  • 注意区分“立即执行版”(首次触发立刻执行,后续连续触发不执行,停顿后再执行下一次)和“非立即执行版”(默认常用,只在最后停顿后执行)
  • 示例:用户在搜索框输入 “hello”,每按一个键都触发请求,用防抖可等到他打完(停顿 300ms 后)再发请求,避免发 5 次无意义的 “h”、“he”、“hel”...

怎么选?看行为意图

判断依据很简单:

  • 要“控制频率、保持节奏” → 选节流(如实时位置上报、滚动锚点高亮)
  • 要“等待稳定、响应终态” → 选防抖(如搜索建议、保存草稿、提交按钮防连点)
  • 有些场景可组合使用:例如 resize 时先防抖确定尺寸稳定,再节流更新布局(较少见,需谨慎)

简单可复用的代码参考

以下为轻量、无依赖的实现(ES6):

Java 接口排错助手
Java 接口排错助手

在调试 Java 后端 API 故障时使用此技能,尤其适用于以下任务:分析日志、跨 Controller、Service 和 Mapper 层追踪请求、定位异常根因、检查 SQL 执行或参数流转,以及生成简洁的诊断结论与修复方案。

下载

节流(时间戳版):

function throttle(fn, delay) {
  let last = 0;
  return function(...args) {
    const now = Date.now();
    if (now - last >= delay) {
      fn.apply(this, args);
      last = now;
    }
  };
}

防抖(非立即执行):

function debounce(fn, delay) {
  let timer = null;
  return function(...args) {
    clearTimeout(timer);
    timer = setTimeout(() => fn.apply(this, args), delay);
  };
}

使用时直接包装事件回调即可,例如:window.addEventListener('scroll', throttle(handleScroll, 100))。

Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南

相关专题

更多
es6新特性
es6新特性

es6新特性有:1、块级作用域变量;2、箭头函数;3、模板字符串;4、解构赋值;5、默认参数;6、 扩展运算符;7、 类和继承;8、Promise。本专题为大家提供es6新特性的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.17

305

5

es6新特性有哪些
es6新特性有哪些

es6的新特性有:1、块级作用域;2、箭头函数;3、解构赋值;4、默认参数;5、扩展运算符;6、模板字符串;7、类和模块;8、迭代器和生成器;9、Promise对象;10、模块化导入和导出等等。本专题为大家提供es6新特性的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.04

406

5

JavaScript ES6新特性
JavaScript ES6新特性

ES6是JavaScript的根本性升级,引入let/const实现块级作用域、箭头函数解决this绑定问题、解构赋值与模板字符串简化数据处理、对象简写与模块化提升代码可读性与组织性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2025.12.24

395

12

html5动画制作有哪些制作方法
html5动画制作有哪些制作方法

html5动画制作方法有使用CSS3动画、使用JavaScript动画库、使用HTML5 Canvas等。想了解更多html5动画制作方法相关内容,可以阅读本专题下面的文章。

2023.10.23

4591

6

canva可画使用技巧汇总
canva可画使用技巧汇总

本专题汇集了PHP中文网精心整理的Canva可画新手使用技巧大全,专为零基础用户打造。无论你是想制作精美海报、PPT还是社交媒体配图,这里都有从注册登录、模板搜索到AI辅助设计、导出分享的全流程保姆级教程。通过深入浅出的图文指南,帮助你快速跨越设计门槛,轻松掌握Canva可画的实用操作,让每个人都能成为设计达人!

2026.05.19

284

21

点击input框没有光标怎么办
点击input框没有光标怎么办

点击input框没有光标的解决办法:1、确认输入框焦点;2、清除浏览器缓存;3、更新浏览器;4、使用JavaScript;5、检查硬件设备;6、检查输入框属性;7、调试JavaScript代码;8、检查页面其他元素;9、考虑浏览器兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.11.24

914

4

Tailwind CSS 如何制作导航栏和卡片
Tailwind CSS 如何制作导航栏和卡片

用 Tailwind CSS 制作导航栏和卡片,可先搭建语义化结构,再组合 Flex、Grid、间距、圆角与阴影类。这里整理横向导航、移动端菜单、卡片网格及悬停效果的相关文章,帮助你把常见页面组件做得清晰且适配不同屏幕。

2026.11.03

0

17

Tailwind CSS 响应式布局怎么写
Tailwind CSS 响应式布局怎么写

Tailwind CSS 响应式布局通常从移动端样式写起,再用 sm、md、lg 等前缀调整不同屏幕宽度下的网格、间距和导航。本专题整理断点配置、Grid 与 Flex 自适应布局及常见溢出问题,帮助你逐步完成多设备适配。

2026.11.03

0

19

Tailwind CSS 常用类名怎么记
Tailwind CSS 常用类名怎么记

Tailwind CSS 类名很多,先按布局、间距、文字、颜色和状态分组记忆,再通过官方文档检索具体写法。本专题结合类名排序、动态拼接失效、自定义实用类等问题,帮助你建立常用类名的速查方法。

2026.11.03

0

12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WebStorm 官方调试文档
WebStorm 官方调试文档

共0课时 | 0人学习

React 教程
React 教程

共58课时 | 12.4万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 6.8万人学习