JavaScript - это однопоточный язык программирования, что означает, что в единицу времени может выполняться только один участок кода.
Однако, JavaScript может выполнять асинхронные операции, которые не блокируют выполнение программы и могут быть выполнены в фоновом режиме. Например, загрузка данных из сети или выполнение вычислений web worker. Эти операции могут выполняться параллельно с основным потоком выполнения JavaScript, но они также используют только один поток выполнения.
В браузере, в котором JavaScript обычно выполняется, существует несколько потоков, которые не принадлежат JavaScript, например, потоки для отрисовки веб-страницы или потоки для работы с сетью. Однако, эти потоки не управляются JavaScript и не могут выполнять JavaScript-код напрямую. Вместо этого JavaScript использует асинхронные вызовы для взаимодействия с этими потоками.
Давайте посмотрим на живом примере как это происходит и работает, вот function foo() { foo()
отправляется в стек и затем, когда выполнение foo()
доходит до return;} foo()
прекращается и выкидывается из стека вызовов.
Что происходит в Exercise 1: Итак, схема выше показывает нам типичное линейное выполнение кода.
Когда код из трех console.log
объявлений отдается в JS.
Шаг 1: console.log("Print 1")
отправляется в стек вызовов и выполняется, после того, как процесс завершится, он будет выкинут из стека. Теперь стек пуст и готов к следующим инструкциям на выполнение.
Шаг 2: Следующей инструкцией на выполнение является console.log("Print 2");
, который также отправляется в стек и после выполнения оттуда также выкидывается. Всё повторяется до тех пор, пока не останется ничего для выполнения.