Debounce
Implement debounce.
Debounce invokes fn() once time has elapsed. The timer is reset if any debounce calls take place before time has elapsed.
function debounce(fn, time) {
let timeoutId;
return function() {
// Check for existing calls
if (timeoutId) {
// Reset timer
clearTimeout(timeoutId)
}
timeoutId = setTimeout(() => {
// Invoke fn
fn.apply(this, arguments);
timeoutId = null;
}, time);
}
}