Взгляните на следующий код Javascript:
var content = document.body
function pausecomp(millis)
{
var date = new Date();
var curDate = null;
do { curDate = new Date(); }
while(curDate-date < millis);
}
setTimeout(function () {
content.innerText = "callback called"
}, 2000)
content.innerText = "timeout set"
setTimeout(function () {
content.innerText = "one second passed, sleeping for 4 more seconds"
pausecomp(4000)
}, 1000)
Я ожидал, что на странице будет отображаться следующий вывод:
- "timeout set"
- Проходит одна секунда
- "Прошла одна секунда, спит еще 4 секунды"
- Прошло еще 4 секунды
- "Обратный вызов называется"
Поскольку второй обратный вызов будет поставлен в очередь перед первым, и он заблокирует стек еще на 4 секунды
Вместо этого я вижу следующий вывод:
- "timeout set"
- 5 секунд прошло
- "Обратный вызов называется"
В чем причина такого поведения?