PassFront
  1. PassFront
  2. База знаний
  3. Функции

Что такое замыкание со стороны функции и переменных?

Функции

Со стороны функций и переменных замыкание — это связь между функцией и переменными её внешнего лексического окружения, которая сохраняется после завершения внешней функции.

Взгляд со стороны переменных

Переменные внешней функции не уничтожаются, пока на них ссылается вложенная функция. Они «живут» в лексическом окружении, на которое замыкание держит ссылку.

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
  • Это основа приватных данных и сохранения состояния.

Коротко для собеседования

Со стороны переменных: они переживают завершение внешней функции, пока на них ссылается вложенная. Со стороны функции: она хранит ссылку на лексическое окружение объявления и через неё читает/меняет внешние переменные. Функции одного окружения делят эти переменные.

Другие вопросы раздела