Скажите, что у меня есть следующий код:
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.
Спасибо!
* Да, я знаю, что не все браузеры соответствуют стандартам: (