Назад к вопросам
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 невозможен