setTimeout() и стэк

151
02 ноября 2021, 22:30

разбираюсь с 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" для последующих.

READ ALSO
Как собрать анимацию из кусков с JS?

Как собрать анимацию из кусков с JS?

Давно зрела мысля сделать небольшую браузерную игру, вот пытаюсь залезть в тему gamedevИзначально была идея сделать анимацию построенную на спрайтах:

120
Звук без учета вкладки

Звук без учета вкладки

День добрыйКаким образом можно проиграть звук в браузере с той вкладки, на которой пользователь не находится в данный момент ? На деле выходит,...

148
Уникальный процесс в одноранговой сети?

Уникальный процесс в одноранговой сети?

Есть процесс(сервис), он должен быть один в одноранговой сетиТо бишь, только на одной машине должен быть запущен этот процесс

179