ES6 生成器函数
生成器
- 函数名前加*, 类型
GeneratorFunction
- 星号不受两侧空格影响
- 调用后会返回一个生成器对象。(生成器对象, 实现了Iterable接口, 可用在任何消费可迭代对象的地方)
- 支持yield关键词。yield;中断, next()恢复执行。注意,yield 关键字必须直接位于生成器函数定义中
- 暂停执行生成器函数
- 通过next()方法接收输入和产生输出
- return()方法关闭
- throw()方法暂停 ``` function * fn(n) { while (n) { yield n; n—; } }
for (let i of fn(2)) { console.log(i); }
// 2 // 1
方式2<br />????
// ???? function fn (n) { if (n > 0) { yield fn(n-1); yield n - 1; } }
for(let i of fn(2)) { console.log(i) }
// 0 // 1
借鉴
function fn () { yield [2, 3, 4] }
for (let i of fn()) { console.log(i) } // 2 3 4 ``` 代码: https://gitee.com/daaasheng/JScode/tree/master/generator
generator原理
自定义迭代器和实现协程
http://www.alloyteam.com/2016/02/generators-in-depth/