DM
Код:
setTimeout(function innerTimeout() {
console.log('delayed message');
}, 5000);
console.log('hi');
Для простоты возьмем, что этот код будет выполняться в chrome.
Выполнение кода:
- в call stack попадает setTimeout.
- setTimeout начинает выполняется как часть web apis. По истечению 5 секунд handler в setTimeout (внутренняя реализация) попадает в call queue.
- call stack попадает console.log('hi').
- call stack пуст, значит выполняем callback queue.
- hander из setTimeout (внутренняя реализация) попадает в call stack. Далее innerTimeout попадает в call stack. Далее console.log('delayed message'); попадает в call stack. (до того как сработает это, появляется задержка равная той, чтобы была в setTimeout (внутреняя реализация)).