ECMAScript 6 引入生成器(generator)、迭代器(iterators)和语法糖(syntax sugar)来进行迭代。 Node.JS v0.11.4 可以通过以下标识来使用:
--harmony --use_strict --harmony_generators
可以理解下面的生成器(generator):
function* fibonacci() {
let previous = 0;
let current = 1;
while(true) {
let temp = previous;
previous = current;
yield current = temp + current;
}
}
我可以打印小于1000的斐波那契数列。
for(let value of fibonacci()) {
if(value > 1000) { break; }
console.log(value);
}
对于这个示例,使用 while
循环而不是 for
循环会更加自然,类似于:
while(value of fibonacci() < 1000) {
console.log(value);
}
使用 while
循环而不是 for
循环,能否迭代迭代器?
function*
表示函数是一个生成器。 - a better oliverfor...of
,顺便说一下,这也不在规范中),这就是为什么它们会做一些傻事,比如在迭代完成后抛出异常(与Python生成器不同,类似于C#生成器)。 - Benjamin Gruenbaum