При запуске в браузере будет setTimeout
когда-либо запускать его код до завершения основной программы? Согласны ли основные поставщики браузеров с этим поведением или это побочный эффект реализации? (или они согласились сохранить этот побочный эффект в качестве стандартного поведения)Браузер Javascript: setTimeout и основная программа
Рассмотрите очень простую (и бесполезную) программу.
setTimeout(function(){
console.log("Timeout Called")
},1);
for(var i=0;i<10000000;i++){};
console.log("done");
Сначала мы установили единый микро-второй setTimeout
функцию обратного вызова, который выводит Timeout Called
на консоль.
Затем мы вращаемся в петле более чем на микросекунду.
Затем мы выводим done
на консоль.
Когда я запускаю эту программу, она всегда выводит
done
Timeout Called
То есть setTimeout
функции обратного вызова не рассматриваются, пока основная программа не закончится.
Является ли это надёжным, определенным поведением? Или бывают случаи, когда основное выполнение программы будет остановлено, запуск обратного вызова, а затем продолжение основной программы.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/EventLoop – zzzzBov