我是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);
}

09-25 19:14