js防抖与节流的区别及实现
•技术分享
290
0
window.addEventListener('scroll', handle())
function handle() {
// 复杂计算
// ....
console.log('运行结果')
}
等于只要不断滚动 handle()方法就不断执行 及其消耗性能
添加防抖处理:
function handle() {
let timer = null
return function () {
clearTimeout(timer)
timer = setTimeout(() => {
// 复杂计算
// ....
console.log('运行结果')
}, 3000)
}
}
添加节流处理:
function handle() {
let isCanDo = true
return function () {
if (!isCanDo) return
isCanDo = false
timer = setTimeout(() => {
// 复杂计算
// ....
console.log('运行结果')
isCanDo3 = true
}, 3000)
}
}
总结:
防抖:如果规定时间内被多次触发,则前面的执行会被取消,只会保留最后一次执行
节流:如果规定时间内被多次触发,只能待前一次执行完了,才能被继续触发,否则不会执行。