----Generators 生成器
function* abc(){
yield 'aa';
yield 'bb'; //一个简单的生成器
}
let temp = abc(); //创建一个迭代器
console.log(temp.next()); // value: 'aa', done: false
console.log(temp.next()); // value: 'bb', done: false
console.log(temp.next()); // value: 'undefined', done: true
---------------------------------
function
*createGenerator() {
for
(let i=0;i<20;i++) {
yield i
}
}
const generator = createGenerator()
console.log(generator.next())
console.log(generator.next())
运行结果
{ value: 0, done: false }
{ value: 1, done: false }
---------
虽然可以在生成器对象上手动调用 next,但我们主要是要在循环中使用。看一下这个稍作修改的程序。
function
*createGenerator() {
for
(let i=0;i<5;i++) {
yield i
}
}
const generator = createGenerator()
for
(const value of generator) {
console.log(value)
}
当在 for...of 循环中使用生成器对象时,每次循环都会在生成器对象上调用 next,并用产生的值填充变量(上面的 value)。运行该程序将会输出以下内容:
0
1
2
3
4