Вопрос проверяет понимание лексического окружения и того, как замыкания разделяют состояние.
Несколько вызовов функции могут ссылаться на одну и ту же переменную, если эта переменная находится во внешнем лексическом окружении. Замыкание не копирует значение переменной, а сохраняет ссылку на неё. Поэтому все функции, созданные в одном окружении, работают с одним и тем же состоянием. Изменение переменной в одном месте будет видно во всех остальных.
Лексическое окружение — это внутренняя структура JavaScript, в которой хранятся переменные, доступные функции в момент её создания.
Внешняя функция создаёт переменную
Внутренняя функция использует эту переменную
Внешняя функция завершает выполнение
Переменная не удаляется, потому что на неё есть ссылка
function createFn() {
let value = 0;
return function () {
value++;
console.log(value);
};
}
const fn1 = createFn();
const fn2 = fn1;
fn1(); // 1
fn2(); // 2
value создана один раз
fn1 и fn2 указывают на одну функцию
Замыкание содержит ссылку на одно окружение
let shared = 0;
function inc() {
shared++;
}
inc();
inc();
Все вызовы работают с одним состоянием
Без явного контроля это может быть неожиданно
Замыкания работают со ссылкой на переменную, а не с её копией. Поэтому несколько вызовов могут изменять одно и то же состояние.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию