Stos wykonania (wywołania): Javascript
Wykonanie lub stos wywołań to mechanizm struktury danych. Mechanizm ten zapewnia, że konteksty wykonania są wykonywane w określonej kolejności.
Wyjaśniłem, czym jest kontekst wykonania w poprzednim artykule, możesz sprawdzić ten artykuł , aby lepiej zrozumieć ten mechanizm.
Możemy myśleć o stosie wykonania (wywołania) jako o miejscu, w którym po kolei gromadzone są zadania do wykonania. Ale ponieważ kolejka tutaj działa zgodnie z algorytmem LIFO (ostatnie weszło, pierwsze wyszło) , ostatnie zaakceptowane zadanie jest wykonywane jako pierwsze. Tymczasem zadanie odnosi się do globalnych i funkcjonalnych kontekstów wykonania.
Kiedy silnik JS odczytuje kod, najpierw umieszcza kontekst globalny w kolejce, zapisując go na stosie wywołań i rozpoczyna wykonywanie. Później, jeśli w trakcie procesu zostanie wywołana jakakolwiek funkcja, tworzony jest kontekst tej funkcji, dodawany do stosu wywołań i uruchamiane jest wykonanie tej funkcji w sposób LIFO.
Załóżmy, że istnieje szpital i jest to Call stack . W szpitalu wykonywane są operacje ratujące i leczące ludzkie życie. Przede wszystkim potrzebni są do tego lekarze i zaopatrzenie. Możemy myśleć o sprowadzeniu tam lekarzy i zaopatrzenia oraz o tym, co robią, jako o pisaniu i wykonywaniu globalnego kontekstu na stosie wywołań. Pomyślmy o pacjencie X jako o kontekście funkcjonalnym lub nowym zadaniu. Pacjent, który trafia do szpitala, wpisuje się na listę oczekujących i natychmiast rozpoczyna leczenie. Tego dnia pacjent Y (nowy przydział) zostaje przewieziony do szpitala w poważniejszym stanie. Ponieważ stan Y jest poważny, Xleczenie jest chwilowo opóźnione i zaczynają zajmować się Y bez marnowania czasu. Po leczeniu Y kontynuują leczenie X od miejsca, w którym je przerwali.
Spójrzmy na to wszystko w kodzie.
W powyższym kodzie stos wywołań kontekstu globalnego będzie wykonywany do momentu wywołania funkcji getResult w linii 14.
Następnie, gdy tylko zostanie wywołana funkcja getResult , kontekst funkcjonalny tej funkcji zostanie utworzony i wysłany do stosu wywołań w celu wykonania.
Po odczytaniu 10. linii w getResult zostanie wywołana funkcja mnożenia , w ten sam sposób zostanie utworzony kontekst, który zostanie dodany do stosu wywołań i wykonany.
Zostanie usunięty ze stosu wywołań, gdy tylko funkcja mnożenia zostanie zakończona. Następnie stos wywołań będzie kontynuowany od miejsca, w którym został przerwany, do kontekstu getResult .
Oznacza to, że następny przejdzie do linii 11. Ta linia wywoła funkcję getSquareValue . Ponownie, kontekst zostanie utworzony w ten sam sposób i zostanie wykonany w stosie wywołań.
Gdy tylko getSquareValue zostanie wykonane, zostanie usunięte ze stosu wywołań i zwrócone do getResult .
Po tym miejscu, w 12. linii, ponieważ kontekst getResult jest już zamknięty, wykonanie tego zadania zostanie zakończone i zostanie zdjęte ze stosu wywołań.
Po wykonaniu całego kontekstu funkcjonalnego, czyli zadań, kontekst globalny zakończy swoją pracę, a nasz stos wywołań zostanie opróżniony.
Takie sekwencyjne wykonywanie zadań ze stosu wywołań daje nam synchroniczny proces wykonywania. Mechanizmowi działania funkcji asynchronicznych (setTimeout, setInterval, setImmediate) przyjrzymy się w następnym artykule.
Dziękuję za przeczytanie. :)
Inne tematy:

![Czym w ogóle jest lista połączona? [Część 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































