Skip to content
快看这页儿写了啥...

JS 实现节流 throttle 方法

题干

节流(throttle)是一种优化技术,它可以控制函数的执行频率。在指定的时间内,函数最多只能执行一次。这个技术常用于浏览器中的 DOM 事件,例如滚动、调整窗口大小、鼠标移动等。节流可以避免这些事件处理函数被过度调用,从而提高性能。

js
function throttle (callback, delay) { }

throttle 函数接受两个参数:待执行函数和等待时间(以毫秒为单位)。

它返回一个新的函数,当这个新函数被连续调用时,在指定的时间内,函数最多只能执行一次。

题解

js
// 时间戳版本
function throttle (callback, delay) {
  // 利用闭包保存时间
  let prev = Date.now()
  return function () {
    let context = this
    let arg = arguments
    let now = Date.now()
    if (now - prev >= delay) {
      callback.apply(context, arg)
      prev = Date.now()
    }
  }
}

// 定时器版本
function throttle(callback, delay) {
  let timer = null;
  return function() {
    if (!timer) {
      timer = setTimeout(() => {
        callback.apply(this, arguments);
        timer = null;
      }, delay);
    }
  }
}

// 测试
window.onresize = throttle(() => {
  // TODO
}, 500);

相关

防抖、节流的作用,分别在什么场景使用?

贡献者

isboyjc's avatar isboyjc

浏览量(PV)  次  ·  独立访客(UV)  人次
不正经的前端 | 八股 · 欢迎 star ⭐