🔴🔵防抖和节流的实现+使用场景⚡⚡⚡

防抖(debounce):事件连续触发时,只执行「最后一次」触发后的回调,如果在这个时间段内又触发了事件,则会重新开始延时。
比喻:公交车等人,只要还有人不断上车就不发车,等没人上来后 一段时间 才真正发车。适用场景:
* - 搜索框输入联想(连续打字只发一次请求)
* - 窗口 resize / 滚动 结束后再计算
* - 表单按钮防重复提交
//* func 需要防抖的函数
// * wait 防抖等待时间(毫秒)
//* immediate 是否立即执行(可选,默认 false)
function debounce(func, wait) {
let timeout;
return function() {
const context = this;
const args = arguments;
clearTimeout(timeout);
timeout = setTimeout(function() {
func.apply(context, args);
}, wait);
};
}
节流(throttle):件连续触发时,保证回调在 wait 毫秒内「最多执行一次」保证一定时间段内只触发一次事件处理函数。
* 比喻:水龙头滴水,无论水开多大,都按固定间隔一滴一滴地流适用场景:
* - 滚动加载更多 / 滚动时更新位置
* - 拖拽、鼠标移动等高频率事件
* - 游戏中的高频更新逻辑
// 节流函数
function throttle(func, wait) {
let timeout;
return function() {
const context = this;
const args = arguments;
if (!timeout) {
timeout = setTimeout(function() {
timeout = null;
func.apply(context, args);
}, wait);
}
};
}

浙公网安备 33010602011771号