概述
yield
关键字用来暂停和继续一个生成器函数 (function*
or legacy generator).
语法
yield [[expression]];
expression
- 用作返回值. 如果忽略, 将返回
undefined
.
描述
yield
关键字使生成器函数暂停执行,并返回跟在它后面的表达式的当前值. 可以把它想成是 return
关键字的一个基于生成器的版本.
yield
关键字实际返回一个对象,包含两个属性, value
和 done
. value
属性为 yield
expression 的值, done
是一个布尔值用来指示生成器函数是否已经全部完成.
一旦在 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 6 (ECMA-262) Yield |
Release Candidate | 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) | ? | ? | ? |