Najpierw wykona się kod
Kopiuj
let a = 0,
b = 10;
a = b;
Po nim a będzie równe 10
później web API 2 kawałki kodu z 2 wywołań setTiemout po kolei do Event Loop
i
Kopiuj
console.log("2 Attempt: " + a);
Po nim a będzie powiększone o 1
Po nim jest efekt na konsoli: 2 attempt 11
Nie wiem, czy ogólnie określone API zagwarantuje sekwencyjne wejście i wyjście eventów. Najparwdopodobniej tak, pewności nie mam czy zawsze, czy jakieś API nie będzie mieć innej implementacji, bo chyba nie jest to zachowanie ściśle określone.
Jakby mnie ktoś o ten konkretnie przykład pytał, to tak bym odpowiedział: "nie mam 100% pewności, nie wiem, zgłaszam wątpliwość do wyjaśnienia ;)".
Na sam koniec "druga fala timeoutów" do WebAPI i jeden kawałek kodu z najbardziej zagnieżdżonego setTimeout do Event Loop
Kopiuj
a++;
console.log("1 Attempt: " + a);
A ponownie zwiększone o 1 i na konsoli: 1 Attempt: 12
TLDR;
@kacor11: wrzucił modelowy "film z przypisów".
Zasada jest: cały kod jest wykonywany, a setTimeout lecą na później do obsługi/wywołania przez API i kiedy przyjdzie ich czas lądują w kolejce do wykonania: każdy fragment kodu jako osobna paczka, po kolei paczka po paczce brana z event queue i wykonywana.
Gdy w takiej paczce będzie setTimeout to trafia on normalnie do API, czeka na swój czas, leci do event loop i stamtąd po dequeue jest wykonywany.
Zadanie/pytanie miało pokazać czy wiesz o czym mowa na wyżej wspomnianym filmie a nie o callback hell, Promise, async/await