javascript函数防抖和函数节流~


镇楼图杀生丸


写在前面

  • 函数防抖和函数节流都是为了优化事件处理程序,

  • 防抖 一个频繁触发的函数,在规定时间内,只让最后一次生效,前面的不生效。

  • 节流 一个频繁触发的函数,在规定时间内,函数执行一次后,只有大于设定的执行周期后才会执行第二次。

使用场景: 防抖 经常用在我们搜索框输入搜索,点击提交,防止等;而 节流 一般在onresize、mousemove、滚动事件等事件中使用,防止过多的请求造成服务器压力

函数防抖;

  • 原理:在第一次调用函数的时候,创建一个定时器,在指定的时间间隔之后运行代码;如果代码还没运行时,又触发了该函数,则清除旧的定时器,重新创建新的定时器;如果超过延时执行的时间,代码执行了,则此时已经是第二次触发;
  • 实现如下:
    const debounce = (method, delay)  => {
        var timer = null;  //定时器
        return () => {
          clearTimeout(timer);
          timer = setTimeout(() => {
            method(); // method.apply(this) 看你用不用箭头函数
          }, delay)
        }
      }
    

    函数节流;

  • 原理:第一次执行函数的时候,记录函数执行的时间,当下一次执行的时候,比较时间是否还在间隔时间内,如果是则不执行,否则继续执行;
  • 实现如下:
    const throttle = (method, delay) => {
      var lastTime = 0; // 上一次函数触发的时间
      return () => {
          var nowTime = Date.now();
          if (nowTime - lastTime > delay) {
              method(); // method.apply(this) 看你用不用箭头函数
              lastTime = nowTime;
          }
      }
    }
    

总结:

函数防抖和函数节流 两者非常相似,但还是有些区别,具体区别可以自行百度或者看以下文章;作者博客:Eno

文章参考:
函数防抖和节流的区别
lodashjs


 上一篇
css实现超出几行省略并... css实现超出几行省略并...
@TOC 单行 word-break: break-all; overflow:hidden; // 超出的文本隐藏 text-overflow:ellipsis; // 溢出用省略号显示 white-space:nowrap; //
2019-09-16
下一篇 
js基础数组Array的一些特性及方法 js基础数组Array的一些特性及方法
@toc 前言: 工作业务数据乱,数据转换用得繁,对接交流竟无语,全靠数组方法换; 数据的了解js数据类型 在js基础中,我都们知道数据类型有两大类:原始类型(基本类型)、引用类型 基本类型js有5 种原始类型,即 Undefined
2019-06-28
  目录