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
You can’t perform that action at this time.