javascript中的生成器函数

Ale*_*_js 2 javascript ecmascript-6

我是 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)
}
Run Code Online (Sandbox Code Playgroud)

Bar*_*mar 5

num.next()在每次迭代中调用两次。您在while()标头中调用它一次以检查结果是否未定义,然后在正文中第二次调用它以记录值。每次调用都会从生成器中检索下一项。因此,您检查 的偶数项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)
}
Run Code Online (Sandbox Code Playgroud)

.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);
}
Run Code Online (Sandbox Code Playgroud)