JavaScript имеет в своём арсенале различные виды очередей, а также стек вызовов.



Необходимый минимум, который поможет разобраться с процессом работы:

✓ Стек вызовов — служит для выполнения синхронных операций;

✓ Очередь микрозадач — контейнер для хранения асинхронных операций, имеющих высокий приоритет;

✓ Очередь макрозадач — контейнер для хранения асинхронных операций с низким приоритетом.



Процесс работы между этими самыми элементами:

✓ Первый, кто начинает процесс выполнения — стек вызовов;

✓ После того, как JavaScript убеждается, в том, что стек пуст — в него по очереди добавляются задачи из очереди микрозадач;

✓ Процесс выполнения продолжается до тех пор, пока не станет ясно, что очередь опустела. Как только это произойдёт — выполняются задачи из очередь макрозадач;

✓ Очередь макрозадач является завершающим этапом. После того как список в нем станет пустым — все повторяется по новой.