Как добавить reset к счётчику на замыкании?

Храните value в окружении каждого вызова createCounter. Оба метода замыкают одну переменную своего экземпляра, а start используется для восстановления начального состояния.

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

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

Храните value в окружении каждого вызова createCounter. Оба метода замыкают одну переменную своего экземпляра, а start используется для восстановления начального состояния.

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

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

Условие

Реализуйте createCounter(start=0), возвращающий методы next и reset. Next увеличивает значение на 1 и возвращает новое. Reset возвращает состояние к start. Несколько счётчиков должны быть независимыми; прямого доступа к переменной нет.

Ответ

Храните value в окружении каждого вызова createCounter. Оба метода замыкают одну переменную своего экземпляра, а start используется для восстановления начального состояния.

function createCounter(start = 0) {
  let value = start;
  return {
    next: () => ++value,
    reset: () => { value = start; }
  };
}
const c = createCounter(5);
console.log(c.next(), c.next()); // 6, 7
c.reset();
console.log(c.next()); // 6

Reset здесь не возвращает значение по контракту. Второй вызов фабрики создаёт другое окружение и не сбрасывается методом первого счётчика.

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

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

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

Подробнее