Заказ на выполнение JavaScript с settimeout ()
-
27-10-2019 - |
Вопрос
Скажите, что у меня есть следующий код:
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, будут оценены.
Спасибо!
*Да, я знаю, что не все браузеры следуют стандартам :(
Решение
Первое из ваших предположений является правильным:testB() is queued up to execute after doLong() and anything else it called have finished.
Если это займет более одной секунды для testA
заканчивать, testB
Придется просто подождать.
Также вам следует написать setTimeout(testB, 1000)
скорее, чем setTimeout('testB()', 1000)
. Анкет Отправка строки в SetTimeout, например, использование eval
, в целом считается злом и сделает вас врагами;)