关于JS中函数节流和函数防抖的作用

函数节流

说明:在规定的时间内,第一执行函数生效,后面的不生效,只有大于设定的时间才执行下一次。

用途:一般用于一个需要频繁触发的函数,出于优化性能的考虑,只让函数触发的第一次生效,在等待的时间内函数不生效,当超过等待的时间才开始下一次的执行。一般用于滚轮加载,频繁请求网络等

代码片段

(```

// 节流函数

// fn为需要传入的函数,delay为设定的时间

function throttle(fn, delay) {

    // 记录上一次刚执行完函数后的时间

      let lastTime = 0;

     // 返回一个函数,形成闭包,保存lastTime的变量

      return function() {

        // 记录当前时间

        let nowTime = Date.now();

        // 判断当前的时间减去上一次执行完函数后的时间,是否超过设定的时间

        if(nowTime - lastTime > delay) {

        // 改变this的指向

          fn.call(this)

          保存上次执行完函数后的时间

          lastTime = nowTime;

        }

      }

    }

```)

注意:这里使用call改变this的指向,是因为函数内又嵌套了一个函数,该函数的this指向的是window,使用call能让该函数指向调用它的对象

函数防抖

说明:在设定的时间内执行该函数,如果设定执行函数的时间内又触发一次,就会取消上一次的执行,直到最后一次时间内超过设定的时间才执行该函数

使用:一个频繁触发的函数,出于性能的优化,只让该函数在设定的时间内最后一次执行,前面在未超过的时间内函数无法生效。一般用于频繁的点击事件或者搜索框输入等

代码片段:

(```

// 防抖函数

    function debounce(fn, delay) {

    // 保存定时器的变量

      let timer = null;

      return function (...res) {

        // 清除上一次开启的定时器

        if(timer) clearTimeout(timer);

        // 开启定时器

        timer = setTimeout(function () {

          fn.apply(this, res)

        }, delay)

      }

      }

```)

两者之间的区别:函数节流是指在第一次就会先触发一次,而函数防抖是指在最后一次才触发,两者都是为了解决函数的频繁触发,提高性能优化。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Ps: 比如搜索框,用户在输入的时候使用change事件去调用搜索,如果用户每一次输入都去搜索的话,那得消耗多大的...
    燕自浩阅读 5,979评论 0 1
  • 单例模式 适用场景:可能会在场景中使用到对象,但只有一个实例,加载时并不主动创建,需要时才创建 最常见的单例模式,...
    Obeing阅读 2,109评论 1 10
  • 长久以来,面向对象在 JavaScript 编程范式中占据着主导地位。不过,最近人们对函数式编程的兴趣正在增长。函...
    神刀阅读 486评论 0 0
  • 一.什么是函数防抖&节流 函数防抖函数防抖(debounce):在事件被触发n秒后再执行回调,如果在这n秒内又被触...
    王蕾_fd49阅读 440评论 0 1
  • 一、问题 如何解决用户频繁操作所带来的性能问题? 二、场景 简书中的Markdown预览功能,希望用户停止输入0....
    Eric_lwh阅读 383评论 0 0