生成器 Generator
有function+*组成的函数叫生成器函数
function fn () {
console.log('我是普通函数');
}
function* fn() {
console.log('我是生成器函数');
}
生成器函数会返回一个generator对象,调用生成器函数 需要 next()
function* fn() {
console.log('我是生成器函数');
}
fn().next()
// 返回一个generator对象,对象的原型上有一个next(),调用返回对象{value:yield后面的值,done}
let item = fn()
console.log(item);
yield (暂停语句,返回信息) 调用next()继续执行
function* fn() {
console.log('我是生成器函数');
yield '我是生成器函数2'
yield '我是生成器函数3'
console.log('我是生成器函数4');
}
let item = fn()
console.log(item);
console.log(item.next());
console.log(item.next());
item.next()
yield 和 return 的区别:
- yirld:暂停执行,调用 next()继续执行
- return:结束执行
next()
next()方法还可以接受一个参数,它的参数会作为上一个yield的返回值
function* demo() {
let res = yield '我是1'
console.log(res);
let res_1 = yield res
console.log(res_1);
}
let ite = demo()
console.log(ite.next());
console.log(ite.next('我是参数'));
ite.next('我是参数1')
yield*:
在一个Generator函数里面,如果我们想调用另一个Generator函数,就需要用到的关键字是:yield*
function* fn_1() {
console.log('fn_1');
}
function* fn_2() {
console.log('fn_2');
}
function* fn_3() {
console.log('fn_3');
}
function* fn_4() {
yield* fn_1()
yield* fn_2()
yield* fn_3()
}
let it = fn_4()
it.next()