yield
关键字用来暂停和恢复一个生成器函数 ( (function*
或 legacy generator).
语法
[rv] = yield [expression]; yield [[expression]];
expression
- 定义通过迭代器协议从生成器函数返回的值。如果省略,则返回undefined。
rv
-
返回传递给生成器的 next() 方法的可选值,以恢复其执行。
描述
yield关键字使生成器函数执行暂停,yield关键字后面的表达式的值返回给生成器的调用者。它可以被认为是一个基于生成器的版本的return关键字。
yield关键字实际返回一个IteratorResult对象,它有两个属性,value和done。value属性是对yield表达式求值的结果,而done是false,表示生成器函数尚未完全完成。
一旦在 yield
expression 处暂停, 除非外部调用生成器的 next()
方法,否则生成器的代码将不能继续执行. 这使得可以对生成器的执行以及渐进式的返回值进行直接控制.
示例
以下代码是一个生成器函数的声明, along with a helper function.
function* foo(){ var index = 0; while (index <= 2) // when index reaches 3, // yield's done will be true // and its value will be undefined; 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 }
规范
Specification | Status | Comment |
---|---|---|
ECMAScript 2015 (6th Edition, ECMA-262) Yield |
Standard | Initial definition. |
浏览器兼容性
Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari (WebKit) |
---|---|---|---|---|---|
Basic support | 39 | 26.0 (26.0) | ? | ? | ? |
Feature | Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|
Basic support | yes (when?) | 26.0 (26.0) | ? | ? | ? |