Warum setTimeout Zahlen ausgibt, die nicht in der Reihenfolge hinzugefügt wurden

8

Ich habe den folgenden Code:

%Vor%

Es gibt aus:

%Vor%

Ich habe irgendwo gelesen, dass setTimeout der Ereigniswarteschlange eine Funktion hinzufügt und Wenn diese Funktion die erste in der Kette ist, überprüft sie, ob die angegebene Zeit verstrichen ist, andernfalls verschiebt sie die Ausführung. Unter dieser Logik habe ich erwartet, dass der obige Code ausgibt: 2,3,4 , da wait() die Ereignisverkettungsverarbeitung blockiert und ein Aufrufstapel abgeschlossen ist und ein Browser endlich Zeit hat, die über setTimeout hinzugefügten Funktionen zu verarbeiten, werden alle drei Funktionen in die Warteschlange gestellt die hinzugefügte Reihenfolge und 1000 sind bereits für die erste Funktion übergeben, also kann ein Browser sie übernehmen und ausführen, aber sie wartet auf die Funktionen, die als zweites und drittes hinzugefügt werden. Warum? Wo ist der Fehler in meiner Logik?

    
AngularInDepth.com 05.04.2016, 08:47
quelle

1 Antwort

9

Die Callback-Funktion tritt nach Timeout-Zeit in die Warteschlange ein. Also,

%Vor%

wird sofort eingegeben, aber

%Vor%

tritt nach 1 Sekunde in die Warteschlange ein. Daher die Reihenfolge 3,4,2

Von MDN :

  

Durch das Aufrufen von setTimeout wird eine Nachricht zur Warteschlange hinzugefügt nachdem die Zeit als zweites Argument abgelaufen ist. Wenn sich keine andere Nachricht in der Warteschlange befindet, wird die Nachricht sofort verarbeitet. Wenn jedoch Nachrichten vorhanden sind, muss die setTimeout-Nachricht auf die Verarbeitung anderer Nachrichten warten. Aus diesem Grund gibt das zweite Argument eine minimale Zeit und keine garantierte Zeit an.

( Hervorhebung meins )

    
T J 05.04.2016, 08:52
quelle

Tags und Links