Answer
t.me/js_testОтвет:
function makeCounter() {
let count = 0;
function counter() {
return count++;
}
counter.decrease = () => count--;
counter.set = (value) => (count = value);
return counter;
}
Объяснение:
Объявляем count в верхнем скоупе - это будет наше состояние. Создаём функцию counter которая при вызове возвращает текущее значение count а потом увеличивает его на единицу. Дальше самое интересное, функцию можно использовать как объект, то есть мы можем задать свойства и методы, как например decrease и set которые уменьшают count на один и ставят count конкретное значение соответственно.
Код для проверки:
function makeCounter() {
let count = 0;
function counter() {
return count++;
}
counter.decrease = () => count--;
counter.set = (value) => (count = value);
return counter;
}
const counter = makeCounter();
console.log(counter()); // 0
console.log(counter()); // 1
counter.decrease();
counter.decrease();
console.log(counter()); // 0
counter.set(20);
console.log(counter()); // 20