yield

 

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) ? ? ?

相关链接

文档标签和贡献者