这是我参与8月更文挑战的第二十五天,活动详情查看:8月更文挑战”
防抖
在我们日常开发中,尤其在一些需要和用户实现大量且频繁的交互的时候,肯定会遇到用户频繁点击,导致接口报错,这个时候我们就需要对其做一些优化了,通常这种情况都是通过防抖来实现的。
那防抖是什么呢?
- 简单点就是,用户在一定时间内多次点击触发一个事件时,只会执行最后一次。
代码实现
/**
* 防抖函数,函数连续调⽤时,时间间隔必须⼤于或等于 wait,func才会执⾏
* @param {function} func:回调函数
* @param {number} wait:时间间隔,默认值 48
* @param {boolean} immediate:是否⽴即调⽤函数,true为立即执行,默认值为true
* @return {function} 返回调⽤函数的结果
*/
function debounce(func, wait = 48, immediate = true) {
let timer, context, args
// 定义延迟执⾏函数
const later = () => setTimeout(() => {
// 延迟函数执⾏完毕,清空缓存的定时器
timer = null
// 延迟执⾏的情况下,函数会在延迟函数中执⾏
if (!immediate) {
func.apply(context, args)
context = args = null
}
}, wait)
// 这⾥返回是每次实际调⽤的函数
return function (...params) {
// 如果是否创建延迟执⾏函数(later),没有就重新创建
if (!timer) {
timer = later()
// 如果是⽴即执⾏,就调⽤函数
if (immediate) {
func.apply(this, params)
} else {
context = this
args = params
}
// 如果已有延迟执⾏函数(later),调⽤的时候清除原来的并重新设定
// 这样做延迟函数会重新计时
} else {
clearTimeout(timer)
timer = later()
}
}
}
好了,防抖的介绍的差不多了,相信对你日后的开发肯定会起到一定作用的。 今天就到这里了。还是那句老话书读百遍其义自见,相信自己加油。
大家,再见,我是Augus,一个爱瞎搞的软件开发工程师。
END~~~