Сделать фабрику счётчиков на замыкании
Реализуйте createCounter(), возвращающую объект с двумя методами: inc() увеличивает приватный счётчик, а get() возвращает текущее значение. Счётчик стартует с 0 и недоступен извне иначе как через эти методы. Два счётчика, созданные по отдельности, должны хранить независимые значения.
function createCounter() {
// ваш код здесь
}
Допишите реализацию.
Объявить локальную let count = 0 внутри createCounter, затем вернуть объект, чьи методы inc и get замыкаются над этой переменной. Возвращённые методы хранят живую ссылку на count после возврата фабрики, поэтому она остаётся приватной. Каждый вызов фабрики создаёт свежий count, давая независимые счётчики.
- ✗Класть
countна возвращаемый объект публичным полем вместо замкнутой локальной - ✗Думать, что все счётчики делят один счётчик, раз делят фабричную функцию
- ✗Считать, что
varдаёт блочную область — у неё функциональная, а не блочная
- →Почему каждый вызов
createCounterпорождает независимыйcount? - →Как добавить метод
reset(), замыкающийся над той же переменной?
Решение
Объявить локальную count и вернуть объект с методами, замыкающимися над ней.
function createCounter() {
let count = 0;
return {
inc() { count++; },
get() { return count; },
};
}
Как это работает
count — локальная переменная createCounter. Возвращённые методы inc и get образуют замыкание: они хранят живую ссылку на count даже после того, как фабрика завершилась. Снаружи к count нельзя обратиться напрямую — только через эти два метода, поэтому она приватна.
Каждый вызов createCounter() создаёт новую переменную count в собственной области видимости, поэтому два счётчика полностью независимы: инкремент одного не влияет на другой.