防抖与节流

52 阅读2分钟

防抖与节流

网上的资料有很多,我这里相当于是个记录,方便自己复习

防抖

防抖的需求

  • 频繁触发
  • 耗时操作
  • 只关心最后一次触发
    持续触发输入事件时,不立即执行func函数,而是在指定时间delay中没有再次触发事件时,才会进行延时执行func函数,也就是在最后一次操作才执行函数

实现原理

如何确定是最后一次操作?
在指定时间内没有事件再触发
实现方法
设置一个定时器和一段延时时间,只要在延迟时间内不断地触发这个事件,就把前面面的定时器清除,只保留最后一个定时器的执行

代码

function debounce(fn,delay){
    let t = null
    if(t){
        clearTimeout()
    }
    return funciton(...args){
        t=setTimeout(()=>{
            fn.apply(this,args)
        },delay)
    }
}

节流

节流的要求

  • 频繁触发
  • 耗时操作
  • 按照一定的频率来执行函数
    在持续进行触发输入事件时,不立即执行func的函数请求,而是每隔指定的delay时间后才会执行一次func函数

实现原理

如何实现每隔指定的delay时间后才会执行一次? 判断触发的时间是否在时间间隔内
实现方法
设置一个执行标志,在定时器里改变这个标志,使得间隔时间执行
代码

funtion throttle(fn,delay){
    let t = true;
    return function(...args){
        if(t){
            setTimeout(()=>{
                fn.apply(this,args)   
                t=true
            },delay)
        }
        t=false
    }
}

参考资料

JS手写题-防抖-节流 - 掘金 (juejin.cn)
【前端】一网打尽──前端必会的“防抖”和“节流”方法 - 掘金 (juejin.cn)
几分钟,学会JS防抖和节流,手写节流函数~_哔哩哔哩_bilibili
几分钟,带你学会什么是JS防抖,手写防抖函数~_哔哩哔哩_bilibili
JavaScript 防抖 - Web前端工程师面试题讲解_哔哩哔哩_bilibili
前端面试题:防抖与节流(一)_哔哩哔哩_bilibili
高阶函数应用-函数防抖【渡一教育】_哔哩哔哩_bilibili