Что такое замыкание?
Замыкание – это комбинация функции, связанной вместе (вложенной) со ссылками на ее окружающее состояние (лексическое окружение). Другими словами, замыкание дает вам доступ к области действия внешней функции из внутренней функции. В JavaScript замыкания создаются каждый раз, когда создается функция, во время создания функции.
В JavaScript каждая работающая функция, блок кода {...}
и скрипт в целом имеют внутренний (скрытый) связанный объект, известный как лексическая среда.
Объект Lexical Environment состоит из двух частей:
- Запись среды — объект, в котором в качестве свойств хранятся все локальные переменные (и некоторая другая информация, например значение
this
). - Ссылка на внешнее лексическое окружение, связанное с внешним кодом.
Когда вы используете замыкания для конфиденциальности данных, вложенные переменные находятся в области видимости только в пределах содержащей (внешней) функции. Вы не можете получить данные из внешней области, кроме как через привилегированные методы объекта. В JavaScript любой открытый метод, определенный в области закрытия, является привилегированным.
Замыкания также можно использовать для создания функций с состоянием, на возвращаемые значения которых может влиять их внутреннее состояние.
Примеры:
var add = (function () {
var counter = 0;
return function () {counter += 1; return counter}
})();
добавить();
добавить();
добавить(); // счетчик теперь равен 3