Skip to content

防抖 && 节流


防抖(debounce):

触发高频事件后n秒内函数只会执行一次,如果n秒内高频事件再次被触发,则重新计算时间。

使用场景:输入框实时联想搜索

javascript
function debounce(fn, delay) {
  let timer;
  return function (...args) {
    timer && clearInterval(timer)
    timer = setTimeout(() => {
      fn.call(this, args);
    }, delay)
  }
}

节流(throttle)

高频事件触发,但在n秒内只会执行一次,所以节流会稀释函数的执行频率,关键在于加锁。

使用场景:window.onresize、scroll、重复点击

javascript
function throttle(fn, delay) {
  let start = 0;
  return function (...args) {
    let now = Date.now();
    if (now - start >= delay) {
      fn.apply(this, args);
      start = now;
    }
  }
}