Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Smarter debouncing
export function debounce (fn, wait = 1) {
let timeout
return function (...args) {
clearTimeout(timeout)
timeout = setTimeout(() => fn.call(this, ...args), wait)
}
}
function debounce (fn, wait) {
var timeout
return function () {
clearTimeout(timeout)
var args = arguments
timeout = setTimeout(function () {
fn.apply(this, args)
}, (wait || 1))
}
}
window.addEventListener('resize', debounce(function () {
}, 500))
@kutyel

This comment has been minimized.

Copy link

@kutyel kutyel commented Jun 14, 2017

What about this?

export function debounce(fn, wait = 1) {
  let timeout;
  return function (...args) {
    clearTimeout(timeout);
    timeout = setTimeout(() => fn.call(this, ...args), wait);
  }
}

I think it looks more ES2015 :)

@vincentorback

This comment has been minimized.

Copy link
Owner Author

@vincentorback vincentorback commented May 26, 2019

@kutyel yummy!

@katzgrau

This comment has been minimized.

Copy link

@katzgrau katzgrau commented Apr 12, 2020

Think there may be a bug in debounce-vanilla.js in passing the correct arguments object. Here's the fixed version:

function debounce (fn, wait) {
  var timeout
  return function () {
    clearTimeout(timeout)
    var args = arguments;
    timeout = setTimeout(function () {
      fn.apply(this, args)
    }, (wait || 1))
  }
}
@vincentorback

This comment has been minimized.

Copy link
Owner Author

@vincentorback vincentorback commented Apr 12, 2020

@katzgrau you're very right! Thank you!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment