Начало доходить, вызов то один:
var f = debounce(f, 1000);
Значит в одном замыкании работаем.
Ну да,
f()
это уже вызов возвращаемой функции, который хоть и образует новые замыкания, но значение переменной
state
всё равно берётся из единственного замыкания образованного при вызове функции
debounce
. А
COOLDOWN
можно просто заменить на 1.
// Кому надо моя версия без обёртки.
// Использую свойство функции, т.к. функция это объект.
// Свойство создается после! первого запуска.
function f(x) {
if(f.rest) {
return;
}
console.log(x);
f.rest = true;
setTimeout(function() {
f.rest = false;
}, 100);
}