Замыкание — функция вместе с окружением, в котором она создана: она помнит переменные внешней функции даже после её завершения.
function counter() {
let n = 0;
return () => ++n;
}
const next = counter();
next(); next(); // 2 — n живёт в замыкании
Что важно знать
var— область видимости функции, всплывает со значениемundefined;let/const— блочная область, до объявления — «временная мёртвая зона» (ReferenceError).constзапрещает переприсваивание, но не изменение объекта.- Классическая задача: цикл
for (var i…)сsetTimeoutпечатает одно и то же число; сletу каждой итерации своя переменная. - Где применяются замыкания: приватное состояние, фабрики функций,
debounceиthrottle, обработчики событий, хуки React. - Замыкание удерживает переменные в памяти — источник утечек, если держать ссылку на большие объекты в долгоживущем обработчике.