JavaScript имеет модель параллелизма, основанную на цикле событий, который отвечает за выполнение кода, сбор и обработку событий, а также выполнение поставленных в очередь подзадач. Прежде чем понять процесс, мы должны понять некоторые важные ключевые слова. Это стек вызовов, веб-API, очередь, цикл событий.
Стек вызовов:
Контексты выполнения JavaScript выполняются через механизм JavaScript. Для управления этими контекстами выполнения движок JS использует стек вызовов. Таким образом, стек вызовов JS представляет собой структуру данных, в которой хранится информация о вызываемых и выполняемых функциях.
Веб-API:
Когда механизм javascript определяет функцию как асинхронную, метод будет отправлен в веб-API. Здесь асинхронная функция ожидает разрешения кода.
Очередь обратного звонка:
Очередь обратного вызова или очередь сообщений содержит список сообщений, подлежащих обработке, и связанных с ними функций обратного вызова. Сообщения ставятся в очередь в ответ на внешние события. Он следует заказам FIFO. FIFO означает «первым пришел — первым вышел». Когда асинхронная задача будет решена, она будет отправлена в очередь обратного вызова.
Цикл событий:
Цикл событий проверяет стек вызовов. Если стек вызовов пуст, то он помещает первую обработанную функцию обратного вызова, присутствующую в очереди обратного вызова.
Здесь рассмотрим движок javascript. Когда движок javascript начнет выполняться, первый console.log будет выполнен первым.
Результат вы найдете в консоли «I am Line One». Затем будет выполнена вторая строка setTimeout.
Но setTimeout — это асинхронная функция. Таким образом, он будет отправлен в часть веб-API.
Тогда движок будет работать с 3-ей консолью. И мы получим вывод «I am Line Three». В это время веб-API работает над разрешением метода setTimeout. После восстановления метода setTimeout он будет отправлен в очередь обратного вызова.
Затем событие проверяет стек вызовов. Когда стек вызовов полностью пуст, цикл событий отправляет метод setTimeout() в стек вызовов. Затем снова обратный вызов выполняет этот код.
Затем, наконец, вы получите новую строку в консоли «I am Line Two».