Вебсправочник
Справочник JavaScript

Замыкание: функция сохраняет доступ к области видимости

Замыкание позволяет функции обращаться к переменным внешней лексической области после завершения внешнего вызова.

Назначение

Замыкание позволяет функции обращаться к переменным внешней лексической области после завершения внешнего вызова.

Как это работает

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

Пример

function createCounter(){let value=0;return ()=>++value;}
const first=createCounter();
const second=createCounter();
console.assert(first()===1);
console.assert(first()===2);
console.assert(second()===1);

Что должно получиться

Первый счётчик помнит два вызова, второй начинает с собственного нуля. Их функции созданы одним кодом, но обращаются к разным внешним переменным.

Граница применения и частая ошибка

Не считайте замыкание автоматическим способом защиты любых секретов. Ссылки и время жизни объектов нужно контролировать, а чувствительные серверные данные не следует передавать клиенту.

Самостоятельная проверка

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

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

Самостоятельный учебный материал. Техническая документация: первоисточник по теме ↗. Если результат отличается, проверьте код и версию браузера.