Назад к вопросам
Junior
117
questionbank
Что такое замыкание в JavaScript?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Замыкание — это функция, которая помнит окружение, в котором она была создана, даже после того, как это окружение завершило свою работу. Она сохраняет доступ к переменным из внешней (охватывающей) функции.
Это возможно благодаря тому, что при создании функции в JavaScript создается "лексическое окружение", которое содержит все переменные и функции, доступные в этот момент. Даже когда внешняя функция завершается, это лексическое окружение сохраняется в памяти, если на него есть ссылка из созданной внутри функции.
function outerFunction(outerVariable) {
return function innerFunction(innerVariable) {
// innerFunction имеет доступ к outerVariable из замыкания
console.log('Внешняя переменная:', outerVariable);
console.log('Внутренняя переменная:', innerVariable);
};
}
const newFunction = outerFunction('Привет извне');
newFunction('Привет изнутри'); // Внешняя переменная: Привет извне, Внутренняя переменная: Привет изнутри
Основные применения:
- Сохранение состояния: Можно создавать функции, которые помнят определенные значения между вызовами.
- Эмуляция приватных переменных: В JavaScript нет встроенных приватных переменных в классическом понимании, но замыкания позволяют это имитировать, скрывая переменные внутри области видимости внешней функции.
- Каррирование и частичное применение: Создание новых функций с предустановленными аргументами.
// Пример приватной переменной
function createCounter() {
let count = 0; // Это "приватная" переменная благодаря замыканию
return {
increment: function() {
count++;
console.log(count);
},
getCount: function() {
return count;
}
};
}
const counter = createCounter();
counter.increment(); // 1
counter.increment(); // 2
console.log(counter.getCount()); // 2
// console.log(counter.count); // undefined - прямой доступ к count невозможен