yield
yield关键字用于暂停和恢复生成器函数(function*或传统生成器函数)。
句法
[rv] = yield [expression];expression定义通过迭代器协议从生成器函数返回的值。如果省略,则返回undefined。rv
返回传递给生成器next()方法的可选值以恢复其执行。
描述
yield关键字暂停生成器功能执行和下面的表达式的值yield的关键字返回到发生器的调用者。它可以被认为是return关键字的基于生成器的版本。
yield关键字实际上返回一个IteratorResult具有两个属性的对象,value和done。value属性是评估的结果yield表达,并且done是false,指示生成器函数还没有完全完成。
暂停yield表达式之后,生成器的代码执行将保持暂停状态,直到next()调用生成器的方法。每次next()调用生成器的方法时,生成器都会恢复执行并运行,直到达到以下之一:
- yield,它使发生器再次暂停并返回发生器的新值。下一次- next()被调用时,执行会立即在语句后重新开始- yield。
- throw用于从生成器中抛出异常。这完全停止生成器的执行,并且执行在调用者中恢复,正如在抛出异常时一样。
- 生成器函数结束;在这种情况下,生成器的执行结束,并且IteratorResult返回给valueisundefined和doneis 的调用者true。
- return达成了一项声明。在这种情况下,发电机的执行结束和- IteratorResult被返回给调用者,其中所述- value的由指定的值- return语句和- done是- true。
如果将可选值传递给生成器的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 |  | 
浏览器兼容性
| Feature | Chrome | Edge | Firefox (Gecko) | Internet Explorer | Opera | Safari (WebKit) | 
|---|---|---|---|---|---|---|
| Basic support | 39 | (Yes) | 26.0 (26.0) | ? | ? | 10 | 
| IteratorResult object instead of throwing | ? | ? | 29.0 (29.0) | ? | ? | 10 | 
| Feature | Android | Edge | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile | 
|---|---|---|---|---|---|---|
| Basic support | (Yes) | (Yes) | 26.0 (26.0) | ? | ? | 10 | 
| IteratorResult object instead of throwing | ? | ? | 29.0 (29.0) | ? | ? | 10 | 
本文档系腾讯云开发者社区成员共同维护,如有问题请联系 cloudcommunity@tencent.com

