防抖函数

防抖是一种技术,用于限制函数被调用的次数。该函数只会在自上次调用以来经过特定的时间后被调用一次。

为了实现这一点,我们可以使用定时器来人为地创建必要的延迟。每次调用防抖函数时,我们需要使用clearTimeout()清除当前挂起的定时器。然后,我们必须使用setTimeout()创建一个新的定时器,延迟调用函数,直到至少经过ms毫秒。最后,使用Function.prototype.apply(),我们可以将this上下文应用于函数,并提供必要的参数。

const debounce = (fn, ms = 0) => {
  let timeoutId;
  return function(...args) {
    clearTimeout(timeoutId);
    timeoutId = setTimeout(() => fn.apply(this, args), ms);
  };
};

window.addEventListener(
  'resize',
  debounce(() => {
    console.log(window.innerWidth);
    console.log(window.innerHeight);
  }, 250)
); // 最多每250毫秒记录一次窗口尺寸