Skip to content

Instantly share code, notes, and snippets.

@nmsdvid
Created February 4, 2014 16:32
Show Gist options
  • Star 71 You must be signed in to star a gist
  • Fork 17 You must be signed in to fork a gist
  • Save nmsdvid/8807205 to your computer and use it in GitHub Desktop.
Save nmsdvid/8807205 to your computer and use it in GitHub Desktop.
Simple JavaScript Debounce Function
// Returns a function, that, as long as it continues to be invoked, will not
// be triggered. The function will be called after it stops being called for
// N milliseconds. If `immediate` is passed, trigger the function on the
// leading edge, instead of the trailing.
function debounce(func, wait, immediate) {
var timeout;
return function() {
var context = this, args = arguments;
clearTimeout(timeout);
timeout = setTimeout(function() {
timeout = null;
if (!immediate) func.apply(context, args);
}, wait);
if (immediate && !timeout) func.apply(context, args);
};
}
/* minified */
function debounce(a,b,c){var d;return function(){var e=this,f=arguments;clearTimeout(d),d=setTimeout(function(){d=null,c||a.apply(e,f)},b),c&&!d&&a.apply(e,f)}}
/* usage */
var myEfficientFn = debounce(function() {
// All the taxing stuff you do
}, 250);
window.addEventListener('resize', myEfficientFn);
@MominBinShahid
Copy link

MominBinShahid commented Feb 13, 2022

As indicated above, in the main gist function, using immediate will break the implementation
So, for such needs where we wanted to call the function immediately (leading edge instead of trailing)
Try this implementation https://youmightnotneed.com/lodash#function

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