yield

概述

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

相关链接

文档标签和贡献者

向此页面作出贡献: AlexChao, mountainmoon, teoli, lpy
最后编辑者: AlexChao,
隐藏侧边栏