Спросят с вероятностью 67%
Event Loop (цикл событий) — это один из ключевых аспектов асинхронного программирования, обеспечивающий возможность выполнения JavaScript-кода в однопоточном режиме, не блокируя выполнение других операций. Это достигается за счёт использования цикла, который постоянно проверяет, есть ли задачи для выполнения, и если они есть, то выполняет их одну за другой.
JavaScript работает в одном потоке, что означает, что в любой момент времени может выполняться только одна операция. Однако, благодаря Event Loop, он способен обрабатывать асинхронные действия, такие как запросы к серверу, таймеры или обработка событий пользовательского интерфейса, не останавливаясь для ожидания их завершения.
Работает Event Loop следующим образом:
1️⃣ Call Stack (Стек вызовов): Содержит текущий стек выполнения функций. Когда функция вызывается, она добавляется в стек вызовов, а когда выполнение функции заканчивается, она удаляется из стека.
2️⃣ Callback Queue (Очередь обратных вызовов): Когда асинхронная операция завершается, её callback (функция обратного вызова) помещается в очередь обратных вызовов.
3️⃣ Event Loop: Цикл событий непрерывно проверяет стек вызовов на наличие функций для выполнения. Если стек вызовов пуст, Event Loop извлекает первую функцию из очереди обратных вызовов и помещает её в стек вызовов для выполнения.
Это позволяет JavaScript обрабатывать длительные операции, такие как загрузка данных, не блокируя главный поток и обеспечивая отзывчивость приложения.
Пример кода:
console.log('Первое сообщение');
setTimeout(() => {
console.log('Сообщение из setTimeout');
}, 0);
console.log('Второе сообщение');
В этом примере, несмотря на то что
setTimeout
имеет задержку в 0 миллисекунд, вывод в консоль будет следующим:Первое сообщение
Второе сообщение
Сообщение из setTimeout
Это происходит потому, что вызов
setTimeout
помещает его callback в очередь обратных вызовов, который будет выполнен только после того, как выполнение текущего кода в стеке вызовов завершится и стек станет пустым.Event Loop позволяет JavaScript выполнять асинхронные операции, обрабатывая их по мере завершения, не блокируя при этом главный поток выполнения. Это делает возможным создание отзывчивых и асинхронных веб-приложений.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍55🔥18👾2
Спросят с вероятностью 47%
Замыкание — это функция, которая запоминает своё лексическое окружение даже после того, как она выполняется вне своей области видимости. Другими словами, функция, объявленная в определённой области видимости, сохраняет доступ к переменным этой области, даже когда она вызывается за пределами своего первоначального контекста. Это важно по нескольким причинам:
1️⃣ Инкапсуляция данных: Позволяют скрыть переменные внутри функции, делая их недоступными извне, кроме как через другую функцию, созданную в той же области видимости.
2️⃣ Сохранение состояния: Позволяют сохранять состояние между вызовами функции, без использования глобальных переменных.
3️⃣ Кадрирование и функциональное программирование: Облегчают каррирование и другие техники функционального программирования, позволяя функциям работать с переменными, которые были в их области видимости в момент создания.
Пример:
function создатьСчетчик() {
let количество = 0; // переменная количество "замкнута" внутри функции увеличить
function увеличить() {
количество += 1;
return количество;
}
return увеличить;
}
const счетчик = создатьСчетчик();
console.log(счетчик()); // 1
console.log(счетчик()); // 2
В этом примере, функция
увеличить
имеет доступ к переменной количество
, даже после того как создатьСчетчик
завершила выполнение. Это происходит благодаря механизму замыканий: увеличить
"запоминает" переменные, которые были в её области видимости в момент создания.Замыкание — это когда функция запоминает и имеет доступ к переменным из своей области видимости, даже после того, как она выполняется в другом контексте. Это позволяет функциям сохранять данные между вызовами и обеспечивать инкапсуляцию состояния, что очень полезно для создания приватных переменных и управления состоянием в программе.
➡️ Примеры ответов
Please open Telegram to view this post
VIEW IN TELEGRAM
👍36❤9🔥2