powiedzieć, że mam następujący kod:JavaScript kolejność wykonywania z setTimeout()
function testA {
setTimeout('testB()', 1000);
doLong();
}
function testB {
doSomething();
}
function doLong() {
//takes a few seconds to do something
}
wykonam testA()
. Czytałem, że Javascript jest jednowątkowy. Co dzieje się po upływie 1000 milisekund, gdy zostanie osiągnięty limit czasu dla testB()
?
Niektóre możliwości mogę myśleć:
testB()
jest w kolejce do wykonania podoLong()
i cokolwiek innego to nazywa zakończeniu.doLong()
jest natychmiast przerywany i rozpoczyna siętestB()
.doLong()
ma trochę więcej czasu na wykonanie przed zatrzymaniem (automatycznie lub po monicie użytkownika) i rozpoczyna siętestB()
.doLong()
jest wstrzymana, rozpoczyna siętestB()
. Po zakończeniutestB()
wznawia siędoLong()
.
Jaka jest prawidłowa odpowiedź? Czy jest to zależne od implementacji lub część standardu? *
This question jest podobna, ale nie taka sama, o ile wiem.
Wszelkie linki, które możesz polecić, aby lepiej zrozumieć Wydajność JavaScript byłaby doceniana.
Dzięki!
* Tak, wiem, że nie wszystkie przeglądarki przestrzegać norm :(
Przyszło mi na myśl 'setTimeout (function() {testB(); }, 1000); 'to najlepszy sposób, czy zostałem wprowadzony w błąd? –
@Shadow Wizard: Tak, bardzo wprowadzeni w błąd. O ile mi wiadomo, nie ma różnicy między twoim a moim (z wyjątkiem tego, że mój jest krótszy oczywiście: D). Aby to zilustrować, wyobraźmy sobie, że wyciągnęliśmy wyrażenie do zmiennej: 'var f = function() {testB(); }; setTimeout (f, 1000); '. Nadal to samo znaczenie, ale teraz widać nadmiarowość. – Jakob
Dziękuję, zarówno za odpowiedź, jak i za poradę dotyczącą przekazywania funkcji do setTimeout zamiast String. Wygląda na to, że samouczki, które czytałem, są trochę wątpliwe;) –