在线文档教程

Generator

Generator

Generator对象由一个生成器函数获得,它符合iterable协议和iterator协议。

语法

function* gen() { yield 1; yield 2; yield 3; } var g = gen( // "Generator { }"

方法

Generator.prototype.next()返回一个由yield表达式生成的值。

示例

一个无限迭代器

function* idMaker() { var index = 0; while(true) yield index++; } var gen = idMaker( // "Generator { }" console.log(gen.next().value // 0 console.log(gen.next().value // 1 console.log(gen.next().value // 2 // ...

传统的生成器对象

Firefox (SpiderMonkey) 在 JavaScript 1.7 中也实现了一个较早版本的生成器,其中函数声明中的星号(*)不是必需的 (只需在函数体中使用yield 关键字)。但是,旧式生成器已弃用。不要使用它们;他们将被删除  (bug 1083482)。

传统的生成器方法

Generator.prototype.next()返回yield表达式产生的值. 与ES2015 生成器对象的next()方法对应.

旧生成器对象示例

function fibonacci() { var a = yield 1; yield a * 2; } var it = fibonacci( console.log(it // "Generator { }" console.log(it.next() // 1 console.log(it.send(10) // 20 console.log(it.close() // undefined console.log(it.next() // throws StopIteration (as the generator is now closed)

规范

SpecificationStatusComment
ECMAScript 2015 (6th Edition, ECMA-262)The definition of 'Generator objects' in that specification.StandardInitial definition.
ECMAScript Latest Draft (ECMA-262)The definition of 'Generator objects' in that specification.Living Standard

浏览器支持

FeatureChromeEdgeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support39.0(Yes)(Yes)No supportNo supportNo support

FeatureAndroidAndroid WebviewEdgeFirefox Mobile (Gecko)IE MobileOpera MobileSafari MobileChrome for Android
Basic supportNo support39.0(Yes)(Yes)No supportNo supportNo support39.0