Вопрос

Скажите, что у меня есть следующий код:

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, в целом считается злом и сделает вас врагами;)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top