Как этот генератор возвращает 3? - PullRequest
0 голосов
/ 01 октября 2019

Пытаясь понять генератор, вместо следующего:

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 ????

Я могу понять, что пост-увеличение не выполняется, потому что оно не внутрипетля. Таким образом, это остается 3 для базы. Но как это становится 1 для силы, так что это приводит к 3?

Признано: Спасибо всем. Я был озадачен тем, что если я использую оператор return, он все равно вызовет yield.

1 Ответ

1 голос
/ 01 октября 2019

С yield:

Описание

[...]

A return оператор достигнут. В этом случае выполнение генератора заканчивается, и IteratorResult возвращается вызывающей стороне, в которой value - это значение, указанное в операторе return, и выполняется: 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
...