javascript - ES6 生成器 : why the argument passed to the first next() function doesn't work?

标签 javascript ecmascript-6 generator

<分区>

这是我的示例代码:

function *g() {
  while (true) {
    console.log(yield)
  }
}

var gen = g();
gen.next(3); // {value: undefined, done:false}
gen.next(3); // 3 {value: undefined, done:false}
gen.next(3); // 3 {value: undefined, done:false}

为什么传递给第一个 next() 函数的第一个参数不起作用?还有为什么value属性的值是undefined,不应该是传入的参数值吗?

最佳答案

这是生成器中发生的事情。

第一次调用初始化生成器(并返回一个迭代器),不运行任何内部代码。

从那时起,迭代器上对 .next(value) 的每次调用都会传递要从当前暂停的 yield 返回的 value并继续执行到下一个 yield(或函数结束),返回 yield 编辑(或返回)的值。

现在,第一个 .next 调用中当前暂停的 yield 是多少?没有,我们从函数的顶部开始执行。

因此,第一个值是undefined,无论您将什么传递给第一个next 调用(它只是被忽略)。

至于 yield 的值是 undefined,您将得到您 yield 的值。

function *g() {
  yield;     // yields undefined
  yield 3;
  yield 'a';
}

for (const v of g()) {
  console.log(v);
}

关于javascript - ES6 生成器 : why the argument passed to the first next() function doesn't work?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45550933/

相关文章:

javascript - 根据维度获取多维数组中属性的长度?

javascript - 如何在 Bing map v7 上创建自定义图钉

javascript - 通过仅选择其属性的一部分,从另一个对象数组构建一个对象数组

javascript - 将 IIFE 模块转换为 RollupJS 可导入的模块

python - 自定义迭代器类与生成器?

javascript - 如果 JSON 数组是一个对象,为什么它会列在原语中?

javascript - HTML Table Row nth-child 动态内容问题

javascript - 从第三方库导入 javascript 模块

python-3.x - Python 3.x : Test if generator has elements remaining

python - 有没有办法在 Python 3 中子类化生成器?