防抖是“等一等,看还有没有下一次”,即事件触发后启动定时器,若在等待期内再次触发则重置倒计时,仅当指定时间无触发时才执行函数,且只响应最后一次触发。

防抖的核心,就是“等一等,看还有没有下一次”。
像电梯关门一样好懂
想象你走进电梯,门开始缓慢关闭——设定好3秒后完全关上并启动。这时又有人快步进来,电梯立刻暂停关门,重新倒数3秒。只要不断有人进来,它就一直重置倒计时;只有当连续3秒没人再进,门才真正关上、电梯出发。
函数防抖也是这个逻辑:事件(比如输入、点击、滚动)每触发一次,就“重设倒计时”;只有在指定等待时间里彻底安静下来,函数才执行一次。
关键特征一句话说清
- 只认最后一次:高频触发中,前面所有操作都被忽略,仅响应“停止触发后的那一次”
- 不执行中间过程:不是“每X毫秒执行一次”,而是“停稳之后才动一次”
- 依赖定时器控制:每次触发都 clearTimeout + setTimeout,靠闭包保存 timer 引用
典型场景帮你印证理解
比如搜索框输入:
- 用户快速敲下 “苹果手机” 四个字,共触发4次 input 事件
- 若设防抖延迟300ms,前3次都会清掉旧定时器、新建新定时器
- 第4次输入后,300ms内没再输入 → 此时才真正发起搜索请求
这样避免了打一个字就查一次、浪费资源又卡顿。
注意一个常见误区
防抖 ≠ 延迟执行的普通定时器。它的“延迟”是动态的、可打断的——只要有新触发,就归零重来。这不是被动等待,而是主动守候“风平浪静”的那个瞬间。











