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

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

Вот пример закрытия JavaScript:

function outerFunction(x) {
  var innerVar = "I am an inner variable";
  function innerFunction() {
    console.log(x + " and " + innerVar);
  }
  return innerFunction;
}

var closure = outerFunction(10);
closure(); 
// Output: 10 and I am an inner variable

В приведенном выше примере, когда мы вызываем outerFunction(10), возвращается внутренняя функция innerFunction(), эта внутренняя функция имеет доступ к переменной innerVar и параметру x, даже если внешняя функция завершила свое выполнение. Мы можем использовать возвращенную функцию closure для доступа к переменной и параметру.

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