next() 方法返回一个包含属性 donevalue 的对象。该方法也可以通过接受一个参数用以向生成器传值。

语法

gen.next(value)

参数

value
向生成器传递的值.

返回值

返回的对象包含两个属性:

  • done (布尔类型)
    • 当迭代器遍历到迭代序列末端时返回值 true。此时,迭代器可以将返回值作为 value
    • 当迭代器仍可继续在迭代序列中向前遍历时返回值 false。这相当于不指定 done 属性。
  • value - 迭代器返回的任意的Javascript值。当 done 的值为 true 时可以忽略该值。

示例

使用 next()方法

下面的例子展示了一个简单的生成器, 以及调用 next 后方法的返回值:

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

var g = gen(); // "Generator { }"
g.next();      // "Object { value: 1, done: false }"
g.next();      // "Object { value: 2, done: false }"
g.next();      // "Object { value: 3, done: false }"
g.next();      // "Object { value: undefined, done: true }"

向生成器传值

在该示例中,调用 next 方法并传入了参数,请注意,首次调用 next 方法时参数0被丢弃.

function* gen() {
   var val =100;
   while(true) {
      val = yield val;  // i=0 时传入参数(0)并调用yield val,参数(0)被丢弃
                        // 第一次yield val 返回循环前的val = 100
      console.log(val); // i=1 时传入参数(1)并调用yield,将参数1赋给上一句
   }                    // yield的返回赋值,然后yield val,返回val = 1
}

var g = gen();
for(let i =0;i<5;i++){
   console.log(i,g.next(i).value);
}

/* 返回:
 0 100
 1   .......这个"1"是第二次调用yield,由while内部console.log(val)产生的
 1 1 .......这个"1 1 "是yield返回,console.log(i,g.next(i).value)产生的
 2
 2 2
 3
 3 3
 4
 4 4
*/

向生成器传值的示例数据流向解析

规范

Specification Status Comment
ECMAScript 2015 (6th Edition, ECMA-262)
Generator.prototype.next
Standard 初始定义
ECMAScript Latest Draft (ECMA-262)
Generator.prototype.next
Draft 草案

浏览器兼容性

We're converting our compatibility data into a machine-readable JSON format. This compatibility table still uses the old format, because we haven't yet converted the data it contains. Find out how you can help!

Feature Chrome Edge Firefox (Gecko) Internet Explorer Opera Safari
Basic support (Yes) 13 26 (26) 未实现 (Yes) 10
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support 5.1 (Yes) 26.0 (26) ? ? 10

相关链接

文档标签和贡献者

此页面的贡献者: ywjco, Ende93, lukywong, jcouyang
最后编辑者: ywjco,