en.javascript.info/1-js/06-advanced-functions/09-call-apply-decorators/03-debounce/task.md
Ilya Kantor 97c8f22bbb up
2017-03-21 17:14:05 +03:00

799 B

importance: 5


Debounce decorator

The result of debounce(f, ms) decorator should be a wrapper that passes the call to f at maximum once per ms milliseconds.

In other words, when we call a "debounced" function, it guarantees that all other future in the closest ms milliseconds will be ignored.

For instance:

let f = debounce(alert, 1000);

f(1); // runs immediately
f(2); // ignored

setTimeout( () => f(3), 100); // ignored ( only 100 ms passed )
setTimeout( () => f(4), 1100); // runs
setTimeout( () => f(5), 1500); // ignored (less than 1000 ms from the last run)

In practice debounce is useful for functions that retrieve/update something when we know that nothing new can be done in such a short period of time, so it's better not to waste resources.