Скажите, что у меня есть следующий код:Javascript порядок выполнения с SetTimeout()
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()
возобновляется.
Каков правильный ответ? Это зависит от реализации или от части стандарта? *
This question похоже, но не то же самое, насколько я могу судить.
Любые ссылки, которые можно рекомендовать для лучшего понимания. Выполнение Javascript оценили бы.
Спасибо!
* Да, я знаю, что не все браузеры следовать стандартам :(
Я пришел к выводу, что 'setTimeout (function() {testB(); }, 1000), 'лучший способ, были ли я введены в заблуждение? –
@ Shadow Wizard: Да, в значительной степени введен в заблуждение. Насколько я знаю, нет никакой разницы между вашим путем и моим (за исключением того, что моя короче, конечно: D). Чтобы проиллюстрировать, представьте, если бы мы вытащили ваше выражение в переменную: 'var f = function() {testB(); }; setTimeout (f, 1000); '. Все тот же смысл, но теперь вы можете видеть избыточность. – Jakob
Спасибо, как за ответ, так и за совет о передаче функции setTimeout вместо String. Похоже, что учебники, которые я читал, немного сомнительны;) –