Таймер попытается выполнить, как только ваш текущий поток будет завершен. Это зависит от того, где вы вызываете window.setTimeout (). Если он находится в теге javascript, но не внутри функции, он будет вызван после достижения конца тега javascript. Например:
<html>
<script type="text/javascript">
setTimeout(function(){alert("hello")},0);
var d=Number(new Date())+1000;
while(Number(new Date())<d){
}
alert("hi");
</script>
</html>
Если вы вызываете setTimeout внутри функции, которая возникает в результате события, например, при загрузке, тогда он будет ждать, пока не вернется функция обработчика события:
<html>
<script type="text/javascript">
document.addEventListener("mousedown",function(){
setTimeout(function(){alert("hello")},0);
var d=Number(new Date())+1000;
while(Number(new Date())<d){
}
alert("hi");
}, true);
</script>
</html>
Невозможно заставить один поток в JavaScript ждать, пока работает другой поток. Слушатели событий будут ждать, пока текущий поток не будет завершен, прежде чем они начнут работать.
Единственное исключение - веб-работники, но они запускаются в другом файле, и единственный способ связи между ними - использование прослушивателей событий, поэтому, пока вы можете отправить сообщение, пока работает другой, оно не получит сообщение, пока оно не будет сделано, или оно вручную проверяет наличие сообщений.