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

  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

  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/

扩展: