разбираюсь с debouncing и throttling, основу работы setTimeout() и setInterval() понимаю, но код ниже меня запутывает, так при выполнении без пауз в Node.js и хроме выдает (1, 3, 4), а при разборе выполнения кода с паузами в режиме отладки в хроме выдает(1, 3).
Не пойму, когда именно срабатывает setTimeout() внутри и вне функции. Могут ли они выполняться в одно время, то есть походу выполнения включается другой?
function f(x) {
console.log(x);
}
function debounce(func, ms) {
let isCooldown = false;
return function() {
if (isCooldown === false) {
func.apply(this, arguments);
isCooldown = true;
}
setTimeout(() => isCooldown = false, ms);
};
}
let f1000 = debounce(f, 1000);
f1000(1); // сразу выполняется
f1000(2); // активирует таймер, в котором через 1с будет "true"
setTimeout(() => f1000(3), 1100);// по идее этот вызов должен сработать наверняка - вывести 3.
setTimeout(() => f1000(4), 2110);// а этот вызов лишь задать "false" для последующих.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости