Декоратор не выводит значение
function f(x) {
alert(x)
}
function debounce(func, ms) {
let isCooldown = false;
return function(x) {
if (isCooldown) return;
func.apply(this, arguments);
isCooldown = true;
setTimeout(() => isCooldown = false, ms);
};
}
let f = debounce(f, 1000);
f(1);
f(2);
Должно выводить 1, 2 спустя 1000ms, но ничего не выводит, в чем ошибка?
Ответы (2 шт):
Автор решения: Igor
→ Ссылка
function f(x) {
console.log(x);
}
function debounce(func, ms) {
let isCooldown = false;
return function(x) {
if (isCooldown) return;
func.apply(this, arguments);
isCooldown = true;
setTimeout(() => isCooldown = false, ms);
};
}
f = debounce(f, 1000);
f(1);
setTimeout(f, 500, 2);
setTimeout(f, 1500, 3);
Автор решения: Alexandr
→ Ссылка
Во первых у вас ошибка декларации, поэтому код не работает.
Во вторых У вас код не будет выводиться 1 и 2 через время, так как вы его не вызываете в таймауте, а перед ним.
В третьих у вас выводится 1, потом вы меняете isCooldown = true; и запускаете вторую функцию, которая не будет ждать таймаут. Во второй функции условие не выполняется и она сразу прекращает работу.
Если напишите, что нужно сделать, то можно будет помочь, а так не понятно зачем такие конструкции.