Closures & Scopemedium

Implement debounce(fn, delay)

Write a `debounce` function that delays invoking `fn` until after `delay` ms have elapsed since the last call. Commonly used on search inputs and resize handlers.

Asked at Google, Amazon, TikTok, Uber

#closures#timers#higher-order functions

Answer

function debounce(fn, delay) {
  let timer = null

  return function (...args) {
    clearTimeout(timer)
    timer = setTimeout(() => {
      fn.apply(this, args)
    }, delay)
  }
}

// Usage
const search = debounce((query) => fetchResults(query), 300)
input.addEventListener('input', (e) => search(e.target.value))

Source: frontendinterviewhandbook.com

Practise more Closures & Scope questions →