一、声明Generator函数
Generator函数,又称生成器函数,是ES6的一个重要的新特性。
普通函数用function来声明,Generator函数用function*声明。
Generator函数函数内部有新的关键字:yield( 产出),普通函数没有。
// 1.generator函数声明
function* fn() {
console.log('案例测试1');
yield '1'
console.log('案例测试2');
yield '2'
console.log('案例测试3');
}
二、调用
返回一个iterator对象,对象里面有个next()方法,返回一个对象,里面有value ,done, value代表yield后面的值。
// 2.调用
var gen = fn()
console.log(gen.next()); // 案例测试1 {value: '1', done: false}
console.log(gen.next()); // 案例测试2 {value: '2', done: false}
console.log(gen.next()); // 案例测试3 {value: undefined, done: true}
console.log(gen.next()); // {value: undefined, done: true}
三、next()
next()方法可以接受一个参数,它的参数作为上一个yeild的返回值。
// 3.next()方法可以接受一个参数,它的参数作为上一个yeild的返回值
function* fn_1() {
console.log('1');
let res = yield 'a'
// console.log(res);
let res_1 = yield res
yield res_1
}
let gen_1 = fn_1()
console.log(gen_1.next()); // 1 {value: 'a', done: false}
console.log(gen_1.next('b')); // {value: 'b', done: false}
console.log(gen_1.next('c')); // {value: 'c', done: false}
四、yield*
从其他函数调用另一个函数,用yield*
// 4.从其他函数调用另一个函数,用yield*
function* fn_2() {
console.log('a');
}
function* fn_3() {
console.log('b');
}
function* fn_4() {
yield* fn_2()
yield* fn_3()
console.log('c');
}
var newGen = fn_4()
newGen.next() // a b c
五、return与yield区别
return:后面的语句不执行
yield:后面的语句执行,通过调用next()继续执行