Проверяет понимание замыканий в JavaScript и умения использовать их для инкапсуляции приватного состояния без классов.
Замыкание возникает, когда внутренняя функция ссылается на переменные из внешней функции, и эта внутренняя функция возвращается наружу. JavaScript сохраняет лексическое окружение, поэтому переменные внешней функции остаются живыми, но недоступными напрямую извне. Это и есть механизм приватного состояния.
Когда внешняя функция вызывается, создаётся её область видимости. Внутренняя функция, возвращённая наружу, держит ссылку на эту область. Снаружи переменные не видны, но функции-методы могут их читать и изменять.
function createCounter() {
let count = 0; // приватная переменная
return {
increment() { count++; },
decrement() { count--; },
value() { return count; }
};
}
const counter = createCounter();
counter.increment();
counter.increment();
console.log(counter.value()); // 2
console.log(counter.count); // undefined
Важно помнить о памяти: пока живёт возвращённая функция, живут и захваченные переменные. Если ссылка потеряна, сборщик мусора освободит память.
Итог: замыкания — простой и надёжный способ инкапсулировать состояние без классов, особенно в функциональном стиле и в модулях.