JS的防抖和节流

防抖(JS的事件多次触发,只执行最后一次)

应用场景: input输入信息进行搜索,如果每敲一个字符就请求后台接口,给后台的压力太大了,所以做好防抖,即让程序只执行最后一次的事件。
为解决该问题,探索到了两个解决方案:

  • 方案一:闭包防抖
    之前有看过用全局变量进行防抖的案例,但个人认为还是用闭包模块化实现起来更完美,这样业务层的代码可以清晰展现出来,方便多人协作团队看懂代码。
  

  
  • 方案二:

直接使用lodash工具库的debounce方法
参考网址:https://blog.csdn.net/qq_39139322/article/details/103295326

节流(控制高频事件执行次数)

应用场景: 滚轮滚动触发事件频繁,加上延迟可低频触发
看过了上面闭包防抖的写法,下面闭包节流的写法也很好理解了~

window.onscroll = throttle(function() {
      console.log('hello world');
    }, 500)
    function throttle (fn, delay) {
      let flag = true;
      return function () {
        if (flag) {
          setTimeout(() => {
            fn.call(this)
            flag = true
          },delay)
        }
        flag = false
      }
    }

你可能感兴趣的:(JS的防抖和节流)