在线文档教程

yield

yield

yield关键字用于暂停和恢复生成器函数(function*或传统生成器函数)。

句法

[rv] = yield [expression];

expression定义通过迭代器协议从生成器函数返回的值。如果省略,则返回undefinedrv

返回传递给生成器next()方法的可选值以恢复其执行。

描述

yield关键字暂停生成器功能执行和下面的表达式的值yield的关键字返回到发生器的调用者。它可以被认为是return关键字的基于生成器的版本。

yield关键字实际上返回一个IteratorResult具有两个属性的对象,valuedonevalue属性是评估的结果yield表达,并且donefalse,指示生成器函数还没有完全完成。

暂停yield表达式之后,生成器的代码执行将保持暂停状态,直到next()调用生成器的方法。每次next()调用生成器的方法时,生成器都会恢复执行并运行,直到达到以下之一:

  • yield,它使发生器再次暂停并返回发生器的新值。下一次next()被调用时,执行会立即在语句后重新开始yield

如果将可选值传递给生成器的next()方法,则该值将成为生成器当前yield操作返回的值。

在生成器的代码路径,其yield运营商以及通过传递给它指定新的起始值的能力之间Generator.prototype.next(),生成器提供了巨大的动力和控制力。

示例

The following code is the declaration of an example generator function.

function* foo() { var index = 0; while (index <= 2) yield index++; }

一旦定义了生成器函数,就可以通过构造一个迭代器来使用它,如图所示。

var iterator = foo( console.log(iterator.next() // { value: 0, done: false } console.log(iterator.next() // { value: 1, done: false } console.log(iterator.next() // { value: 2, done: false } console.log(iterator.next() // { value: undefined, done: true }

规范

规范状态评论
ECMAScript 2015(第6版,ECMA-262)该规范中'收益'的定义。标准初始定义。
ECMAScript最新草案(ECMA-262)该规范中“收益率”的定义。Living Standard

浏览器兼容性

FeatureChromeEdgeFirefox (Gecko)Internet ExplorerOperaSafari (WebKit)
Basic support39(Yes)26.0 (26.0)??10
IteratorResult object instead of throwing??29.0 (29.0)??10

FeatureAndroidEdgeFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support(Yes)(Yes)26.0 (26.0)??10
IteratorResult object instead of throwing??29.0 (29.0)??10