Frage

Sagen Sie, dass ich den folgenden Code habe:

function testA {
   setTimeout('testB()', 1000);
   doLong();
}

function testB {
   doSomething();
}

function doLong() {
   //takes a few seconds to do something
}

Ich führe aus testA(). Ich habe gelesen, dass JavaScript Single-Threaded ist. Was passiert nach 1000 Millisekunden, wenn die Zeitüberschreitung für testB() ist erreicht?

Einige Möglichkeiten, an die ich denken kann:

  • testB() ist in der Warteschlange, um danach auszuführen doLong() Und alles andere, was es genannt hat, haben fertig.
  • doLong() wird sofort beendet und testB() ist gestartet.
  • doLong() wird ein wenig länger ausgeführt, bevor er gestoppt wird (entweder automatisch oder nach dem Aufforderung des Benutzers) und testB() ist gestartet.
  • doLong() wird angehalten, testB() ist gestartet. Nach testB() hat beendet, doLong() Lebensläufe.

Was ist die korrekte Antwort? Ist es abhängig oder Teil des Standards?*

Diese Frage ist ähnlich, aber nicht dasselbe, soweit ich das beurteilen kann.

Alle Links, die Sie für eine bessere Verständnis von JavaScript -Ausführung empfehlen können, wären geschätzt.

Vielen Dank!

*Ja, ich weiß, dass nicht alle Browser Standards folgen :(

War es hilfreich?

Lösung

Die erste Ihrer Vermutungen ist die richtige:testB() is queued up to execute after doLong() and anything else it called have finished.

Wenn es mehr als eine Sekunde dauert für testA beenden, testB Muss einfach warten.

Sie sollten auch schreiben setTimeout(testB, 1000) statt setTimeout('testB()', 1000). Das Senden einer Zeichenfolge an setTimeout ist wie die Verwendung eval, allgemein als böse angesehen und wird dich Feinde machen;)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top