Что такое замыкание со стороны функции и переменных?
Функции
Со стороны функций и переменных замыкание — это связь между функцией и переменными её внешнего лексического окружения, которая сохраняется после завершения внешней функции.
Взгляд со стороны переменных
Переменные внешней функции не уничтожаются, пока на них ссылается вложенная функция. Они «живут» в лексическом окружении, на которое замыкание держит ссылку.
function makeCounter() {
let count = 0; // переменная сохраняется благодаря замыканию
return () => ++count;
}
const counter = makeCounter();
counter(); // 1
counter(); // 2 — count не сбросилсяВзгляд со стороны функций
Каждая функция при создании запоминает ссылку на окружение, где она объявлена. Через эту ссылку она обращается к внешним переменным при вызове, даже позже и в другом месте.
Следствия
- Переменные разделяются между всеми функциями одного окружения:
function make() {
let value = 0;
return {
get: () => value,
set: (v) => (value = v),
};
}
const o = make();
o.set(5);
o.get(); // 5 — общая переменная value- Это основа приватных данных и сохранения состояния.
Коротко для собеседования
Со стороны переменных: они переживают завершение внешней функции, пока на них ссылается вложенная. Со стороны функции: она хранит ссылку на лексическое окружение объявления и через неё читает/меняет внешние переменные. Функции одного окружения делят эти переменные.