Learn how to create a simple debounce utility in javascript
Table of contents
Open Table of contents
Debounce code snippet
// debounce.js
function debounce(functionToDebounce, durationInMs) {
let timeoutId = null;
return (...args) => {
window.clearTimeout(timeoutId);
timeoutId = window.setTimeout(() => {
functionToDebounce.apply(null, args);
}, durationInMs);
};
}
Explanation
Here debounce function takes two parameters ( a function to debounce and duration for debouncing).
timeoutId stores the reference to remove stale queued calls.
We return a function from debounce , so debounce is high order function.
High order function is a function that takes and/or returns one or more functions.
This returned function when called firstly clears stale queued calls via clearTimeout and then queue a new call via setTimeout.
clearTimeout won’t complain even if timeoutId is falsy and the value of timeoutId is remembered via closure.
Inside the setTimeout we call the original function to be debouned via apply and pass all the arguments needed.
Check out the codesandbox link https://codesandbox.io/s/debounce-in-javascript-gfomon