前端面试题:防抖和节流

158 阅读1分钟

一、防抖

是什么?

单位时间内,频繁触发事件,只执行最后一次(如:王者荣耀中回城)

怎么做?:

利用定时器,每次触发之前先清除掉之前的定时器(从新的开始)

使用场景: 搜索框搜索

代码:

<script>
      // 防抖函数
      // 思想:当函数被连续调用时,只有最后一次调用会生效,并在指定时间后执行。
      // 需求:往一个输入框啦里面输入一个词的时候,每隔2秒进行,只要停止输入,就立即执行搜索。
      const $input = document.querySelector("#input");
      let timer = null;
      document.querySelector("#input").addEventListener("input", function () {
        clearTimeout(timer);
        timer = setTimeout(() => {
          document.querySelector(".container").innerHTML = $input.value;
        }, 2000);
      });
</script>

二、节流

是什么?

单位时间内,频繁触发事件,只执行一次。

怎么做?

利用定时器,等定时器执行完毕之后,再开启定时器

使用场景: 高频事件,快速点击事件,鼠标滑动,scroll事件,resize事件

使用lodash库,利用里面的debounce(防抖)和throttle(节流)来做。