Сохраните значение в замыкании фабрики и верните методы работы с ним. 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 создают независимые переменные; задержка таймера минимальная, а не строго точная.