这个生成器如何returns3?

How does this generator returns 3?

在尝试理解生成器时,而不是遵循以下内容:

function* powerSeries(number,power) {
  let base = number;
  while (true) {
    yield Math.pow(base, power);
    base++
  }
}

let n = powerSeries(3,2)
n.next() // value: 9
n.next() // value: 16
...

我试过:

function* powerSeries(number,power) {
  let base = number;
  yield Math.pow(base, power);
  return base++ // was trying to understand what happens if using return
}

let n = powerSeries(3,2)
n.next() // value: 9
n.next() // value: 3 But how ????

我可以理解 post 增量没有完成,因为它不在循环内。所以,它保持 3 为基础。但是它如何变成 1 的幂,所以结果是 3?

已确认: 谢谢大家。我很困惑,如果我使用 return 语句,那么它仍然会调用 yield.

来自yield

Description

[...]

A return statement is reached. In this case, execution of the generator ends and an IteratorResult is returned to the caller in which the value is the value specified by the return statement and done is true.

function* powerSeries(number,power) {
  let base = number;
  yield Math.pow(base, power);
  return base++ // was trying to understand what happens if using return
}

let n = powerSeries(3,2)
console.log(n.next().value); // 9
console.log(n.next().value); // 3
console.log(n.next().value); // undefined