防抖:用户触发事件过于频繁,只要最后一次执行的操作
举个例子:防抖好比电梯门,当不停的有人进入的时候,门不会关闭,当电梯监测到5秒内没有人进入,才会关门
使用闭包+setTimeout封装防抖函数:
function debounce(fn, detil) {
let t = null
return function () {
if (t !== null) {
clearTimeout(t)
}
t = setTimeout(() => {
fn.call(this)
}, detil)
}
}
fn:为业务逻辑,detil:为监测时间
节流:事件触发过于频繁的时候,控制执行次数
function throttle(fn, detail) {
let flag = true;
return function () {
if (flag) {
setTimeout(() => {
fn.call(this)
flag = true
}, detail)
}
flag = false
}
}