Храните value в окружении каждого вызова createCounter. Оба метода замыкают одну переменную своего экземпляра, а start используется для восстановления начального состояния.
Как добавить reset к счётчику на замыкании?
Храните 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 здесь не возвращает значение по контракту. Второй вызов фабрики создаёт другое окружение и не сбрасывается методом первого счётчика.