I am interested in the "debouncing" function in javascript, written here : http://davidwalsh.name/javascript-debounce-function
Unfortunately the code is not explained clearly enough for me to understand. Can anyone help me figure out how it works (I left my comments below). In short I just really do not understand how this works
// 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.
function debounce(func, wait, immediate) {
var timeout;
return function() {
var context = this, args = arguments;
var later = function() {
timeout = null;
if (!immediate) func.apply(context, args);
};
var callNow = immediate && !timeout;
clearTimeout(timeout);
timeout = setTimeout(later, wait);
if (callNow) func.apply(context, args);
};
};
EDIT: The copied code snippet previously had callNow
in the wrong spot.
Best Answer
The code in the question was altered slightly from the code in the link. In the link, there is a check for
(immediate && !timeout)
BEFORE creating a new timout. Having it after causes immediate mode to never fire. I have updated my answer to annotate the working version from the link.