next() 直接在生成器上与具有生成器值的变量上表现不同

next() behaves differently directly on generator vs variable with generator value

为什么直接在生成器上调用 next() 与在分配了相同生成器作为其值的变量上调用 next() 时得到不同的结果?

以下全部code/output。

下面是生成器,加上变量declaration/assignment:

function* gen() {
  yield 1;
  yield 2;
  yield 3;
};

let genVar = gen();

第一个代码片段:

let first = genVar.next();
console.log(first);
second = genVar.next();
console.log(second);  

第一个代码片段的输出:

{ value: 1, done: false }
{ value: 2, done: false }

第二个代码片段:

let one = gen().next();
console.log(one);
two = gen().next();
console.log(two);

第二个代码片段的输出:

{ value: 1, done: false }
{ value: 1, done: false }

我目前最好的猜测是这与 value/reference 的分配有关?

任何时候执行生成器函数,都会创建一个全新的生成器对象,允许从头开始迭代生成器函数的步骤。

所以在你的第二个例子中,你实际上创建了两个不同的迭代器。