Замыкание: функция сохраняет доступ к области видимости
Замыкание позволяет функции обращаться к переменным внешней лексической области после завершения внешнего вызова.
Назначение
Замыкание позволяет функции обращаться к переменным внешней лексической области после завершения внешнего вызова.
Как это работает
Сохраняется доступ к переменной, а не обязательно снимок её первоначального значения. Несколько функций могут разделять одну область; разные вызовы фабрики могут создавать независимое состояние.
Пример
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 в песочнице этого сайта не выполняется. Перенесите пример в отдельный учебный файл. Сначала проверьте исходный результат, затем измените входные данные; ошибка проверки означает, что результат отличается от ожидаемого.