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

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

作者: 虎牙工务员刘波 | 来源:发表于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