Скажем, что у меня есть следующий код:
function testA {
setTimeout('testB()', 1000);
doLong();
}
function testB {
doSomething();
}
function doLong() {
//takes a few seconds to do something
}
Выполняю testA()
. Я прочитал, что Javascript является однопоточным. Что произойдет после 1000 миллисекунд, когда достигнут тайм-аут для testB()
?
Некоторые возможности, о которых я могу думать:
-
testB()
помещается в очередь для выполнения послеdoLong()
, и все, что оно вызвало, завершено. -
doLong()
немедленно завершается и запускаетсяtestB()
. -
doLong()
предоставляется немного дольше для выполнения перед остановкой (автоматически или после запроса пользователя) иtestB()
. -
doLong()
приостанавливается,testB()
запускается. По завершенииtestB()
,doLong()
возобновится.
Каков правильный ответ? Является ли он зависимым от реализации или частью стандарта? *
Этот вопрос похож, но не тот, насколько я могу судить.
Любые ссылки, которые вы можете рекомендовать для лучшего понимания выполнения Javascript, будут оценены.
Спасибо!
* Да, я знаю, что не все браузеры следуют стандартам: (