установить значение счетчика через замыкание
Вот код счетчика
function makeCounter() {
let count = 0;
function counter(value) {
return count++;
}
return counter;
}
let counter = makeCounter();
alert( counter() ); // 0
alert( counter() ); // 1
Мне нужно сделать возможность устанавливать значение count (как пример - вызываю ее пару раз и count = 2, потом устанавливаю ему значение 15, вызываю еще раз и функция возвращает 16) установить значение счетчика, но только через замыкание.
Вот мое нерабочие решение добавить функцию, но как ее вызвать и указать чтобы она изменила значение не пойму)
function makeCounter() {
let count = 0;
function counter() {
return count++;
}
function value (value) {
return count = value;
}
return counter;
}
let counter = makeCounter();
alert( counter() ); // 0
alert( counter() ); // 1
Или же была мысль создать внутри переменную value и передать параметром в функцию counter, а там использовать условие, если есть параметр, то count = value; иначе count++;
И так же по идее должно работать уменьшение счетчика
Ответы (2 шт):
function makeCounter() {
let count = 0;
function counter(value) {
if (arguments.length == 0)
return count++;
else
count = value;
}
return counter;
}
let counter = makeCounter();
console.log(counter()); // 0
console.log(counter()); // 1
console.log(counter(15)); // undefined
console.log(counter()); // 15
console.log(counter()); // 16
Лучше аргументами не менять ход выполнения функции. Функция в js - это всё тот же объект, которому можно завести поле с ещё одной функцией, замыкающей count.
function makeCounter() {
let count = 0;
function counter() {
return ++count;
}
counter.reset = function (value = 0) {
count = value;
return count;
}
return counter;
}
let counter = makeCounter();
counter(); // 1
counter(); // 2
counter.reset(10); // 10
counter(); // 11