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 的分配有关?
任何时候执行生成器函数,都会创建一个全新的生成器对象,允许从头开始迭代生成器函数的步骤。
所以在你的第二个例子中,你实际上创建了两个不同的迭代器。
为什么直接在生成器上调用 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 的分配有关?
任何时候执行生成器函数,都会创建一个全新的生成器对象,允许从头开始迭代生成器函数的步骤。
所以在你的第二个例子中,你实际上创建了两个不同的迭代器。