使用javascript单击按钮时,无需使用生成器函数即可获取序列中的下一个值

使用javascript单击按钮时,无需使用生成器函数即可获取序列中的下一个值,javascript,arrays,generator,sequence,Javascript,Arrays,Generator,Sequence,我想要实现的是,点击一个按钮就可以在factorialSequence中获得下一个值(唯一) 到目前为止,我所做的是定义一个factorialSeq()函数和一个generator()函数,如下所示。生成器函数将factorialSeq()作为参数。单击一个按钮,我只能接收序列中的第一个值,但是如果我登录到控制台,序列中的所有值都将按正确的顺序返回 <button style="padding: 20px" id="nextBtn">Next</button> <

我想要实现的是,点击一个按钮就可以在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.log(gen.next());
        // console.log(gen.next());
        // console.log(gen.next());
        // console.log(gen.next());
    });
</script>
下一步
设nextBtn=document.getElementById('nextBtn');
函数发生器(定序器){
常量seqArgs=[…参数];
seqArgs.shift();
const seq=序列器(…seqArgs);
返回{
下一个(){
返回seq();
}
}
}
函数factorialSeq(){
设currentNumber=1;
让结果;
返回函数factorialReturn(){
如果(!结果){
结果=1;
返回结果;
}
结果*=当前编号;
currentNumber+=1;
返回结果;
}
}
nextBtn.addEventListener('click',函数(){
var gen=发电机(factorialSeq);
console.log(gen.next());
//console.log(gen.next());
//console.log(gen.next());
//console.log(gen.next());
});
我希望每次单击按钮(即序列中的下一个值)时,输出都会不同。请注意,我不想在javaScript中使用内置的生成器函数。谢谢

点击一个按钮,我只能收到序列中的第一个值

这是因为每次单击按钮都会创建一个新序列,并且只记录一个值(第一个值)。你会想做的

var gen = generator(factorialSeq);
nextBtn.addEventListener('click', function () {
    console.log(gen.next());
});

问题如下:每次单击
#next
时都重新定义了生成器。所以用这个来代替:

让nextBtn=document.getElementById('nextBtn');
让resetBtn=document.getElementById('resetBtn');
函数发生器(定序器){
常量seqArgs=[…参数];
seqArgs.shift();
const seq=序列器(…seqArgs);
返回{
下一个:()=>{
返回seq();
}
}
}
函数factorialSeq(){
设currentNumber=1;
让结果;
返回函数factorialReturn(){
如果(!结果){
结果=1;
返回结果;
}
结果*=当前编号;
currentNumber+=1;
返回结果;
}
}
var gen=发电机(factorialSeq);
nextBtn.addEventListener('click',函数(){
console.log(gen.next());
});
resetBtn.addEventListener('click',函数(){
发电机=发电机(factorialSeq);
});
下一步

重置
哦,天哪!非常感谢,非常感谢。这很有帮助