Счётчик, реализованный через замыкание

Поле current в возвращённом объекте — снимок числа 0, а не связь с переменной замыкания. Сделайте его getter, чтобы каждое чтение возвращало актуальное значение.

Короткий ответ

Что ответить на собеседовании

Поле current в возвращённом объекте — снимок числа 0, а не связь с переменной замыкания. Сделайте его getter, чтобы каждое чтение возвращало актуальное значение.

Подробный разбор

Ответ с пояснениями

Условие

В этой задаче нужно реализовать простой счётчик, используя возможности замыкания в JavaScript. Функция должна возвращать объект с текущим значением счётчика и методами для увеличения и уменьшения этого значения.

const makeCounter = () => {
    let current = 0;

    const inc = () => {
        current++;
    };

    const dec = () => {
        current--;
    };

    return {
        current,
        inc,
        dec
    };
};

const counter = makeCounter();

counter.inc();
counter.inc();
counter.dec();

// console.log(counter.current);

Ответ

Поле current в возвращённом объекте — снимок числа 0, а не связь с переменной замыкания. Сделайте его getter, чтобы каждое чтение возвращало актуальное значение.

const makeCounter = () => {
  let current = 0;
  return {
    get current() { return current; },
    inc() { current++; },
    dec() { current--; }
  };
};

После двух inc и одного dec counter.current равен 1. Состояние остаётся скрытым в замыкании, разные фабрики независимы. Если сразу деструктурировать const {current} = counter, локальная переменная снова сохранит только значение на момент чтения — getter не создаёт реактивную привязку.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее