百度搜索 mdn Generator
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Generator
例子1 基本使用
// 例子1 基本写法
function* iGenerator() {
yield 1;
yield 2;
yield 3;
}
// 生成对象
let generator = iGenerator();
console.log(generator.next());
console.log(generator.next());
console.log(generator.next());
console.log(generator.next());
//打印对象
// { value: 1, done: false }
// { value: 2, done: false }
// { value: 3, done: false }
// { value: undefined, done: true }
例子2 构建无穷大的结果集
// 例子2 构建无穷大的结果集
function* idMaker() {
let index = 0;
while (true)
yield index++;
}
let dMaker = idMaker(); // "Generator { }"
console.log(dMaker.next());
console.log(dMaker.next());
console.log(dMaker.next());
// 打印结果
// { value: 0, done: false }
// { value: 1, done: false }
// { value: 2, done: false }
例子3 遍历生成器对象
// 例子3 遍历生成器对象
function* iidMaker() {
let index = 0;
while (index<10){
yield index++;
}
}
let obj = iidMaker();
for (value of obj) {
console.log(value);
}
// 0 1 2 3 4 5 6 7 8 9
例子4 可以递归调用
function* foo1() {
yield 'a';
yield 'b';
}
function* foo2() {
// 调用上一个生成器函数
yield* foo1();
yield 'c';
}
console.log([...foo2()]);
// 打印结果
// ["a", "b", "c"]
例子5 生成器对象转成数组
// 例子5 生成器对象转成数组
function* foo3() {
yield 'a';
yield 'b';
yield 'c';
yield* ['d','e'];
}
console.log([...foo3()]);
// 打印结果 ["a", "b", "c", "d", "e"]