关于函数的防抖和节流

342 阅读1分钟

函数的防抖节流是前端对于前端代码性能优化的一个重要组成部分,不管平时撸代码的时候,提升前端代码性能,还是找工作去面试的时候,这是一个必须要掌握的知识点

函数的防抖和节流用常见的举例理解为当我们拖动滚动条时,会一直触发滚动事件,假设设置拖动30S之后停止,delay是1S,因为每一秒都会触发多次这个滚动事件

防抖

就是当30S后我们停止拖动时,会执行一次回调函数
官方一点的解释:所谓防抖,就是指触发事件后在 n 秒内函数只能执行一次,如果在 n 秒内又触发了事件,则会重新计算函数执行时间。

节流

每秒钟我们会触发一次回调函数,一共触发了三十次
官方一点的解释:所谓节流,就是指连续触发事件但是在 n 秒中只执行一次函数

接下来涉及到的就是常见的防抖节流的手写代码问题了

//  非立即执行版本         ps:其实立即执行和非立即执行我还没搞懂,抽空去看看
debounce(fn,delay){
    let timer = null
    return funtion(){
        const that = this
        let  arg = arguments
        clearTimeout(timer)
       timer =  setTimeout(function(){
            fn.apply(that,arg)
        },dalay)
    }
}
// 节流  时间戳版本   
throttle(fn,delay){
    let preTime= Date.now()
    return function(){
        const that = this
        let  arg = arguments
        let nowTime = Date.now()
        if(nowTime-preTime >delay){
            fn.apply(that,arg)
        }
    }
}