Прежде чем перейти к циклу событий, давайте рассмотрим, как работает JavaScript.

Все мы уже слышали о движке V8 как о концепции, а также понимаем, что JavaScript является однопоточным или что часто используется очередь обратного вызова. Это означает, что у него есть один стек вызовов и один стек памяти. Он выполняет код по порядку и должен завершить выполнение кода, прежде чем перейти к следующему.

Стек вызовов отвечает за отслеживание всех выполняемых линейных операций. Каждый раз, когда функция завершается, она выскакивает из стека.

Связь JavaScript и HTML осуществляется с помощью событий, которые происходят, когда пользователь или браузер манипулируют страницей. Когда страница загружается, это называется событием. Когда пользователь нажимает кнопку, это нажатие является событием. Другие примеры включают события, такие как нажатие клавиши, закрытие окна, изменение окна и т. Д.

Цикл событий - это тайна асинхронного программирования JavaScript. Среда выполнения JavaScript содержит очередь сообщений, в которой содержится список сообщений, которые необходимо обработать, и связанные с ними функции обратного вызова. Эти сообщения помещаются в очередь в ответ на внешние события, для которых была задана функция обратного вызова. В цикле очередь сканируется на предмет следующего сообщения, и при обнаружении сообщения выполняется обратный вызов для этого сообщения.

Выполнение будет зависеть от количества ожидающих задач в очереди. В приведенном ниже примере сообщение «это просто сообщение» будет записано на консоль до обработки сообщения обратного вызова. Поскольку ожидание - это минимальное время, необходимое для обработки запроса во время выполнения.

(функция () {

console.log («это начало»);

setTimeout (function callBack1 () {
console.log ('Callback 1: this is a msg from call back');
});
// имеет значение времени по умолчанию 0

console.log («это просто сообщение»);

setTimeout (function callBack2 () {
console.log ('Обратный вызов 2: это сообщение от обратного вызова');
}, 0)
;

console.log («это конец»);

})();

// «это начало»
// «это просто сообщение»
// «это конец»
// «Обратный вызов 1: это сообщение от обратного вызова »
//« Обратный вызов 2: это сообщение от обратного вызова »

По сути, setTimeout должен дождаться завершения всего кода сообщений в очереди, даже если вы установили ограничение по времени для своего setTimeout.

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

В цикле событий есть интересный, но очень эффективный YouTube Video, который поможет вам гораздо легче понять этот термин.

- Ссылка [https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop]