我是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)
}
您可以使用内置的
.next()
迭代方法来代替显式调用for-of
方法。function* numberGen(n) {
for (let i = 0; i < n; i++) {
yield i
}
}
const num = numberGen(10)
for (let i of num) {
console.log(i);
}