Фабрика счётчика с операциями и отложенным выводом

Сохраните значение в замыкании фабрики и верните методы работы с ним. log ставит таймер, который читает значение спустя секунду.

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

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

Сохраните значение в замыкании фабрики и верните методы работы с ним. log ставит таймер, который читает значение спустя секунду.

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

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

Условие

Реализуйте функцию createCounter, которая генерирует объект‑счётчик, обладающий тремя методами:

  • increment() — прибавляет к текущему значению 1;
  • decrement() — отнимает от текущего значения 1;
  • log() — выводит в консоль актуальное значение, но делает это с задержкой в одну секунду.
const counter = createCounter(10);

counter.increment();
counter.increment();
counter.decrement();

counter.log(); // Через 1 секунду в консоли: 10 + 1 + 1 - 1 = 11

Функция должна корректно работать с любым начальным числом, поддерживая независимость нескольких созданных счётчиков.

Ответ

Сохраните значение в замыкании фабрики и верните методы работы с ним. log ставит таймер, который читает значение спустя секунду.

function createCounter(initial) {
  let value = initial;
  return {
    increment() { value++; },
    decrement() { value--; },
    log() { return setTimeout(() => console.log(value), 1000); }
  };
}

Для приведённых операций получится 11. Если значение меняется между log() и callback, этот вариант выводит актуальное значение на момент исполнения таймера. Для снимка на момент вызова сохраните const snapshot = value перед setTimeout. Разные вызовы createCounter создают независимые переменные; задержка таймера минимальная, а не строго точная.

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

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

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

Подробнее