Sobes.tech
Back to questions
Junior
87
questionbank

Для чего нужны замыкания в JavaScript?

Sobes Copilot

Get answers in real time

Answer from AI

sobes.tech AI

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

// Пример создания приватной переменной с использованием замыкания
function createCounter() {
  let count = 0; // Приватная переменная

  return {
    increment: function() {
      count++;
      console.log(count);
    },
    decrement: function() {
      count--;
      console.log(count);
    }
  };
}

const counter = createCounter();
counter.increment(); // Получаем доступ к `count` через метод
counter.decrement(); // Состояние `count` сохраняется
// console.log(counter.count); // Нельзя получить доступ к приватной переменной

// Пример сохранения состояния функции между вызовами
function makeCumulator(initialValue) {
  let sum = initialValue;

  return function(value) {
    sum += value;
    return sum;
  };
}

const cumulate = makeCumulator(10);
console.log(cumulate(5)); // 15
console.log(cumulate(3)); // 18

// Пример реализации паттерна Module
const myModule = (function() {
  let privateVariable = 'I am private';

  function privateMethod() {
    console.log(privateVariable);
  }

  return {
    publicMethod: function() {
      privateMethod(); // Доступ к приватным членам
    }
  };
})();

myModule.publicMethod();

// Пример каррирования
function curry(a) {
  return function(b) {
    return function(c) {
      return a + b + c;
    }
  }
}

const sumCurried = curry(1)(2)(3);
console.log(sumCurried); // 6