我是 javascript 的新手,无法理解生成器函数的这种行为。为什么它只输出奇数(1,3,5,7,9)?
function* numberGen(n){
for (let i=0;i<n;i++){
yield i
}
}
const num = numberGen(10)
while (num.next().value!=undefined){
console.log(num.next().value)
}
最佳答案
您在每次迭代中调用 num.next()
两次。您在 while()
header 中调用它一次以检查结果是否未定义,然后您在正文中第二次调用它以记录该值。每次调用都会从生成器中检索下一个项目。因此,您检查偶数项是否为 null
,并在其后记录奇数项。
相反,您应该为单个调用分配一个变量
function* numberGen(n){
for (let i=0;i<n;i++){
yield i
}
}
const num = numberGen(10)
let i;
while ((i = num.next().value) !== undefined){
console.log(i)
}
您可以使用内置的for-of
迭代方法,而不是显式调用.next()
方法。
function* numberGen(n) {
for (let i = 0; i < n; i++) {
yield i
}
}
const num = numberGen(10)
for (let i of num) {
console.log(i);
}
关于javascript - javascript 中的生成器函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61353396/