Я хочу получить следующее значение (уникальное) в пределах factorialSequence при нажатии кнопки.
Что я сделал до сих пор, так это определил функцию factorialSeq () и функцию generator (), как показано ниже. Функция генератора принимает в качестве аргумента factorialSeq (). При нажатии кнопки я смог получить только первое значение в последовательности, но если я войду в консоль, все значения в последовательности будут возвращены в правильном порядке.
<button style = "padding: 20px" id = "nextBtn">Next</button>
<script>
let nextBtn = document.getElementById('nextBtn');
function generator(sequencer) {
const seqArgs = [...arguments];
seqArgs.shift();
const seq = sequencer(...seqArgs);
return {
next() {
return seq();
}
}
}
function factorialSeq() {
let currentNumber = 1;
let result;
return function factorialReturn() {
if (!result) {
result = 1;
return result;
}
result *= currentNumber;
currentNumber += 1;
return result;
}
}
nextBtn.addEventListener('click', function () {
var gen = generator(factorialSeq);
console.info(gen.next());
// console.info(gen.next());
// console.info(gen.next());
// console.info(gen.next());
});
</script>
Я ожидаю, что результат будет отличаться каждый раз, когда я нажимаю кнопку (то есть следующее значение в последовательности). Обратите внимание, что я не хочу использовать встроенную функцию генератора в javaScript. Спасибо



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


On click of a button, I was only able to receive the first value in the sequence
Это потому, что вы создаете новую последовательность при каждом нажатии кнопки и регистрируете только одно значение (первое). Ты захочешь сделать
var gen = generator(factorialSeq);
nextBtn.addEventListener('click', function () {
console.info(gen.next());
});
Проблема заключалась в следующем: вы переопределяли генератор при каждом щелчке #next. Так что используйте это вместо этого:
let nextBtn = document.getElementById('nextBtn');
let resetBtn = document.getElementById('resetBtn');
function generator(sequencer) {
const seqArgs = [...arguments];
seqArgs.shift();
const seq = sequencer(...seqArgs);
return {
next:()=>{
return seq();
}
}
}
function factorialSeq() {
let currentNumber = 1;
let result;
return function factorialReturn() {
if (!result) {
result = 1;
return result;
}
result *= currentNumber;
currentNumber += 1;
return result;
}
}
var gen = generator(factorialSeq);
nextBtn.addEventListener('click', function () {
console.info(gen.next());
});
resetBtn.addEventListener('click', function () {
gen = generator(factorialSeq);
});<button style = "padding: 20px" id = "nextBtn">Next</button>
<button style = "padding: 20px" id = "resetBtn">Reset</button>Большое спасибо. Это очень полезно
Боже мой! Большое спасибо