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

JS 实现防抖 debounce 方法

题干

防抖(debounce)是一种常用的技术,用于限制函数在短时间内被频繁调用。它的基本思想是:如果在一段时间内连续触发同一个事件,只执行最后一次触发的事件。

防抖通常用于处理诸如窗口大小调整、页面滚动、输入框内容改变等事件。例如,当用户在输入框中输入内容时,我们可能希望在用户停止输入一段时间后再执行搜索操作,而不是每次输入都执行搜索。这时,我们就可以使用防抖技术来实现这个需求。

js
function debounce (callback, delay) { }

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

它返回一个新的函数,当这个新函数被连续调用时,只有在最后一次调用后的等待时间内没有再次被调用,才会执行原函数。

题解

js
function debounce (callback, delay) {
  // 利用闭包保存定时器
  let timer = null
  return function () {
    let context = this
    let arg = arguments
    // 在规定时间内再次触发会先清除定时器后再重设定时器
    clearTimeout(timer)
    timer = setTimeout(function () {
      callback.apply(context, arg)
    }, delay)
  }
}


// 测试
let input = document.querySelector('input');
let debouncedSearch = debounce(search, 500);

input.addEventListener('input', debouncedSearch);

function search(event) {
  // TODO
}

相关

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

贡献者

isboyjc's avatar isboyjc

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