返回

手撸JS合集之防抖节流简明攻略

前端

手撸JS合集——防抖节流简明攻略

手撸JS,只为更好理解JavaScript的内部机制,打好基础做铺垫,学习JS必撸系列将带来一系列关于JavaScript的从基础到进阶的干货。

什么是防抖和节流?

防抖(debounce)和节流(throttling)都是用来优化JavaScript事件处理的常见技术。它们都有助于提高应用程序的性能,特别是在处理快速发生的事件时。

  • 防抖 会在一一段时间内只触发一次事件。这对于防止重复的事件处理程序被触发非常有用,例如当用户快速输入文本时,或者当用户滚动页面时。
  • 节流 会在一定时间内只触发一定次数的事件。这对于限制事件处理程序被触发的次数非常有用,例如当用户连续点击按钮时,或者当用户移动滑块时。

如何实现防抖和节流?

防抖和节流都可以使用JavaScript的setTimeout()clearTimeout()方法来实现。

防抖

// 防抖函数
function debounce(func, wait) {
  let timeout;
  return function () {
    const args = arguments;
    const context = this;
    if (timeout) {
      clearTimeout(timeout);
    }
    timeout = setTimeout(() => {
      func.apply(context, args);
    }, wait);
  };
}

节流

// 节流函数
function throttle(func, wait) {
  let last = 0;
  return function () {
    const now = Date.now();
    if (now - last < wait) {
      return;
    }
    last = now;
    func.apply(this, arguments);
  };
}

什么时候使用防抖和节流?

防抖和节流都可以在不同的场景下使用。以下是两个常见的示例:

  • 防抖 可用于防止重复的事件处理程序被触发。例如,当用户快速输入文本时,可以使用防抖来防止文本输入框的input事件被重复触发。
  • 节流 可用于限制事件处理程序被触发的次数。例如,当用户连续点击按钮时,可以使用节流来限制按钮的click事件被重复触发。

总结

防抖和节流都是用来优化JavaScript事件处理的常见技术。它们都有助于提高应用程序的性能,特别是在处理快速发生的事件时。防抖会在一段时间内只触发一次事件,而节流会在一定时间内只触发一定次数的事件。