js中的防抖节流

文章类型:Javascript

发布者:admin

发布时间:2023-03-03

本质是优化高频率执行代码的一种方式

常用于频繁触发的请求、滚动、按下抬起监听、鼠标述求

一定义:

1:防抖

定义几秒后执行,如果中途被触发,则重新计时间

2:节流

几秒内只运行一次,如果在中途被触发,无效,还是按照之前定义的时间执行

二区别:

1:相同点:

都是setTimeout,目的都是为了降低回调执行评论,节省计算资源

2:不同点:

函数防抖是在连续操作结束后处理回调,只执行最后一次

函数节流是在一段时间内只执行一次

三代码实现:

防抖

// 函数防抖的实现
function debounce(fn, wait) {
var timer = null;

return function() {
var context = this,
args = arguments;

// 如果此时存在定时器的话,则取消之前的定时器重新记时
if (timer) {
clearTimeout(timer);
timer = null;
}

// 设置定时器,使事件间隔指定事件后执行
timer = setTimeout(() => {
fn.apply(context, args);
}, wait);
};
}

节流

// 函数节流的实现;
function throttle(fn, delay) {
var preTime = Date.now();

return function() {
var context = this,
args = arguments,
nowTime = Date.now();

// 如果两次时间间隔超过了指定时间,则执行函数。
if (nowTime - preTime >= delay) {
preTime = Date.now();
return fn.apply(context, args);
}
};
}