Зачем нужно замыкание?
Функции
Замыкание нужно, чтобы сохранять состояние между вызовами, инкапсулировать приватные данные и фиксировать контекст в колбэках. Это одна из фундаментальных возможностей JavaScript.
Зачем нужно замыкание
1. Приватные данные
Переменные во внешней функции недоступны снаружи — эмуляция приватности:
function createCounter() {
let count = 0; // приватная
return {
inc: () => ++count,
get: () => count,
};
}
const c = createCounter();
c.inc();
c.count; // undefined — напрямую не достать2. Сохранение состояния между вызовами
Мемоизация, счётчики, кеши хранят данные в замыкании.
3. Фабрики функций и каррирование
const multiplier = (factor) => (n) => n * factor;
const double = multiplier(2);
double(5); // 104. Колбэки и обработчики
Замыкание сохраняет нужные данные для отложенного вызова (обработчики событий, setTimeout, промисы).
Где встречается на практике
- Хуки React (обработчики и эффекты замыкают значения state своего рендера; само состояние React хранит во fiber компонента).
- Мемоизация и debounce/throttle.
- Модульный паттерн (приватность).
Коротко для собеседования
Замыкание нужно для: приватных данных (инкапсуляция), сохранения состояния между вызовами (счётчики, мемоизация), фабрик функций/каррирования и фиксации данных в колбэках. Лежит в основе хуков React, debounce и модульного паттерна.