1.生成器函数的返回值是一个iterator遍历器对象,调用对象上的next()方法,得到的是一个对象,对象中的value值就是yield后的值。
2.next()方法可以接受一个参数,它的参数会作为上一个yield的返回值。
3.如果有嵌套的next(),先执行里边的。
4.生成器函数中调用生成器函数用 yield*
举例:1.
//声明一个Hello的Generator函数
function* Hello() {
let res = yield `hello`;
yield res;
}
let iterator = Hello();
//结果:一个生成器对象
console.log(iterator.next());
//结果:{value: "hello", done: false}
console.log(iterator.next("这里的内容替换yield `hello`"));
//结果:{value: "这里的内容替换yield `hello`", done: false}
console.log(iterator.next());
//结果:{value:“undefined”,done:true}
2.
//声明Generator函数:gen1
function* gen1() {
yield "gen1 start";
yield "gen1 end";
}
//声明Generator函数:gen2
function* gen2() {
yield "gen2 start";
yield "gen2 end";
}
//声明Generator函数:start
function* start() {
yield "start";
yield* gen1();
yield* gen2();
yield "end";
}
//调用start函数
var ite = start();
//创建一个生成器
console.log(ite.next());
//{value: "start", done: false}
console.log(ite.next());
//{value: "gen1 start", done: false}
console.log(ite.next());
//{value: "gen1 end", done: false}
console.log(ite.next());
//{value: "gen2 start", done: false}
console.log(ite.next());
//{value: "gen2 end", done: false}
console.log(ite.next());
//{value: "end", done: false}
console.log(ite.next());
//{value: "undefined", done: true}