Skip to content

节流防抖

防抖

  • 含义:防抖可以概括为触发高频事件后n秒内函数只会执行一次,如果n秒内高频事件再次被触发,则重新计算时间
应用场景(举例):

  • 1:输入框
    /**
     * @desc 函数防抖
     * @param func 函数
     * @param delay 延迟执行毫秒数
     */
    function debounce(func, delay) {
      let timer = null;
      return function(...args) {
        if (timer) {
          clearTimeout(timer);
        }
        timer = setTimeout(() => {
          func.apply(this, args);
          timer = null;
        }, delay);
      }
    }

节流

  • 含义:高频事件触发,但在n秒内只会执行一次,节流会稀释函数的执行频率
应用场景(举例):

  • 1:窗口调整
  • 2: 页面滚动
  • 3:抢购和疯狂点击
    /**
     * @desc 函数节流
     * @param func 函数
     * @param delay 延迟执行毫秒数
     */
    function throttle(func, delay) {
      let lastTime = 0;
      return function(...args) {
        let now = Date.now();
        if (now - lastTime > delay) {
          func.apply(this, args);
          lastTime = now;
        }
      }
    }