Skip to content

常见手写

debounce 防抖

js
export const debounce = (fn, delay = 500) => {
  let timer = undefined
  let active = true

  const debounced = (...args) => {
    if (active) {
      clearTimeout(timer)
      timer = setTimeout(() => {
        active && fn(...args)
        timer = undefined
      }, delay)
    } else {
      fn(...args)
    }
  }

  debounced.isPending = () => timer !== undefined

  debounced.cancel = () => active = false

  debounced.flush = (...args) => fn(...args)

  return debounced
}