美文网首页
什么是函数防抖,之我眼中的函数防抖

什么是函数防抖,之我眼中的函数防抖

作者: 虎牙工务员刘波 | 来源:发表于2021-04-25 17:51 被阅读0次

    函数防抖的意思:就是防止抖动,用函数来控制。
    例举个场景:你的页面有个echart图表,假设这时候用户调整浏览器窗口大小,图表大小需要跟随着改变,这时候因为onresize浏览器窗口大小变化了,就会不停的触发图表渲染,导致看起来抖动一样。那么你想登用户在调整完窗口大小后才去执行重新渲染echart图表就可以使用函数防抖。
    函数防抖

      preShake = (func, time) => {
        let has;   //声明一个变量,在后面用来存储延时函数
        return function() {    //返回一个函数=》闭包
          const context = this;  
          const args = arguments;   //获取原本函数的所有参数,arguments就是
          if (has) clearTimeout(has);   //clearTimeout清除对应的延时方法
          has = setTimeout(() => {   //存储延时方法
            func.apply(context, args);   //自动执行函数,绑定this上下文
          }, time);   //time 延时多长执行函数
        };
      };
    
    //使用
    window.onresize = preShake(function(){
        console.log('?')
    },2000)
    

    上面代码执行结果,在你连续调整浏览器窗口大小的情况下2s后只会在控制台输出一个“ ? ”问号符,而不会一直输出。

    防抖原理:一定时间内的连续执行的动作不触发函数执行,等动作完成后才去执行函数方法。
    包含知识点:

    • 闭包
    • setTimeout
    • this指向
    • arguments

    return function () { } 闭包,返回一个函数。因为闭包能记住函数的上次变量为多少。has代表了上一次的延时方法,如果有就清除,并且重新设置。
    setTimeout 延时执行方法
    clearTimeout 清除当前对应的延时,如果延时还没结束就直接清除这个延时。假设你是2s那么还没2s时候你清除,那么这个2s延时就会被清除。只有下次开始时候才会重新计时。
    apply 绑定对应的this上下文内容,并执行函数
    arguments 代表函数传进来的所有参数(如果是箭头函数没有这个)

    相关文章

      网友评论

          本文标题:什么是函数防抖,之我眼中的函数防抖

          本文链接:https://www.haomeiwen.com/subject/gdadrltx.html