JS笔记——生成器

生成器是ES6中新增的一个极为灵活的结构,拥有在一个函数块内暂停和恢复代码执行的能力
1.生成器基础
生成器的形式是一个函数,函数名称前带星号(*)表示他是一个生成器。只要是能够定义函数的地方,就能够定义生成器(箭头函数不能用来定义生成器)函数

function *generatorFn(){} //生成器函数声明

调用生成器函数会产生一个生成器对象。生成器对象一开始处于暂停执行状态(suspended)。与迭代器类似,生成器对象也实现了Iterator接口,所以具备next()方法。调用这个方法会让生成器开始或恢复执行
next()方法的返回值相似于迭代器,有一个done属性和一个value属性。函数体为空的生成器函数中间不会停留,调用一次next()就会让生成器到达 done:true 状态code

function *generatorFn(){}
const g = generatorFn();
console.log( g ); //generatorFn{ <suspended> }
console.log( g.next ); //f next() { [native code] }
console.log( g.next() ); //{ done:true, value:undefined }

value属性是生成器函数的返回值,默认为undefined,能够经过生成器函数的返回值指定:对象

function *generatorFn(){
      return 'foo';
}
......
console.log( g.next() ) //{ done:true, value:'foo' }

生成器函数只会在初次调用next()方法后开始执行接口

生产器对象实现了Iterator接口,他们默认的迭代器是自引用的generator

function *generatorFn() {}
console.log( generatorFn ); //f* generatorFn() {}
console.log( generatorFn()[Symbol.iterator] );//f [Symbol.iterator]() {native code}
console.log( generatorFn() ); //generatorFn{ <suspended> }
console.log( generatorFn()[Symbol.iterator] ); //generatorFn{ <suspended> }

2.经过yield中断执行it

相关文章
相关标签/搜索