前言
Generator函数,又称生成器函数,是ES6的一个重要的新特性。
一、函数声明
普通函数
用function来声明,Generator函数
用function*声明。
Generator函数内部有新的关键字:yield( 产出),普通函数没有。
function* fn() {
console.log('我是generator函数1');
yield '我是2'
console.log('我是generator函数2');
yield '我是3'
console.log('我是generator函数3');
}
二、函数调用
一开始,我们调用函数执行后,返回了一个:[object Genrator]生成器对象,我们把它赋值到变量gen中,仅此而已,并没有做太多的事情。
var gen = fn()
//第1次调用生成器对象gen的next( )方法,返回了一个对象
console.log(gen.next());
//我是generator函数1 {value: '我是2', done: false}
//第2次调用生成器对象gen的next()方法,同样得到了一个对象
console.log(gen.next());
//我是generator函数2 {value: '我是3', done: false}
//最后一次调用生成器对象gen的next()方法,又得到了一个对象,但是返回的确实true。
console.log(gen.next());
//我是generator函数3 {value: undefined, done:true }
没错!这里可以把Generator函数被调用后得到的生成器理解成一个遍历器iterator,用于遍历函数内部的状态。
三、next方法
next( ) 方法还可以接受一个参数,它的参数会作为上一个yield的返回值.
function* genEr() {
console.log('1');
let res = yield '我是第一个'
console.log(res);
let res_1 = yield res
yield res_1
}
let genEr_1 = genEr()
console.log(genEr_1.next());
//1 {value: '我是第一个', done: false}
总结
以上就是今天要讲的内容。