JavaScript — это однопоточный язык программирования, так как он имеет только один стек вызовов и кучу памяти. Ну, это делает работу довольно медленной, потому что если какая-либо другая программа хочет выполниться, то эта программа должна ждать, пока предыдущая программа не завершит выполнение.

Вот где на сцену выходит среда выполнения JavaScript! Пока выполняется синхронный код JavaScript, веб-браузер работает в фоновом режиме. У нас есть что-то, называемое веб-API или API веб-браузера, которое позволяет движку JavaScript знать, что в фоновом режиме ожидается выполнение некоторой работы.

Веб-API поставляется вместе с браузером. Все браузеры вместе с JavaScript Engine имеют собственную среду выполнения JavaScript, которая предоставляет веб-API. Эти веб-API выполняют множество функций, таких как отправка HTTP-запросов, прослушивание событий и т. д. Например. перейдите в консоль и введите window. Консоль предоставит вам список операций, таких как setTimeout(), indexedDb(), setInterval() и многие другие…

Эти операции называются веб-API, и они асинхронны! Это означает, что можно поручить этим API делать что-то в фоновом режиме и возвращать данные после их завершения. Тем временем мы можем просто продолжать работать над стеком вызовов и выполнять в нем функции.

Давайте разберемся в этом подробнее!

Всякий раз, когда стек вызовов сталкивается с чем-то вроде setTimeout() или setInterval(), он отправляет его в WebAPI. в Очереди обратного вызова. Затем Цикл обработки событий проверяет, пуст ли стек вызовов? Если он полностью пуст, то только он помещает эту функцию в стек вызовов. И тогда стек вызовов, наконец, выполняет его!

Давайте посмотрим пример

Рассмотрим приведенный ниже код,

  1. Прежде всего, console.log(‘1’) помещается в стек вызовов и выполняется, а затем в конечном итоге удаляется из стека вызовов.
  2. Затем стек вызовов встречает setTimeout() , и как только он его встречает, он отправляет его в WebAPI для обработки. Веб-API выполняет его в фоновом режиме.
  3. Тем временем console.log(‘3’) помещается в стек вызовов и выполняется.
  4. Затем через 1000 мс console.log('2) помещается в очередь обратного вызова, а затем цикл событий проверяет, пуст ли стек вызовов к этому времени. Если это так, он затем помещает setTimeout() в стек вызовов, а затем вызывает стек выполняет его соответственно! Результат, который мы получаем, выглядит следующим образом.

В завершение скажу, что самое главное — Node.js — это среда выполнения JavaScript. Он был создан в 2009 году для выполнения JavaScript вне браузера, поскольку у нас был WebAPI, обратный вызов, цикл событий на основе браузера!