【问题标题】:next() behaves differently directly on generator vs variable with generator valuenext() 直接在生成器与具有生成器值的变量上的行为不同
【发布时间】:2021-07-11 20:52:51
【问题描述】:

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

所有代码/输出如下。

下面是生成器,加上变量声明/赋值:

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

let genVar = gen();

第一个代码sn-p:

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

第一个代码sn-p的输出:

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

第二个代码sn-p:

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

第二个代码sn-p的输出:

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

目前我最好的猜测是这与按值/引用分配有关吗?

【问题讨论】:

  • 区别不在于变量与调用表达式作为.next() 调用目标。只是在第二个例子中你调用了gen()两次,创建了两个不同的生成器对象。

标签: javascript generator next


【解决方案1】:

每次执行生成器函数时,都会创建一个全新的生成器对象,它允许从一开始就迭代生成器函数的步骤。

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

【讨论】:

  • 允许迭代生成器的迭代器”的措辞令人困惑。生成器迭代器。
  • 同意。我稍微修改了我的答案,仍然试图保留每个新生成器对象从一开始就迭代生成器函数的想法,因为这似乎暗示了这个问题可能不清楚。希望它更清楚一点,但如果没有,请随时告诉我。
猜你喜欢
  • 2022-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多