生成器是一种惰性的序列,它支持一边读取数据,一边生成数据(有没有想到小学数学蓄水池问题哈哈哈哈),如果数据比较大时,这种机制能节省很多内容空间。JavaScript 在 ES6 标准中也新增了对生成器的支持。

    1. /*
    2. 生成器的构造是用函数来包装,但是我们应该把下例看成是一个 [1,2,3,4,5] 的序列,而不是一个函数
    3. */
    4. function* f() {
    5. for (let i = 0; i < 5; i++) {
    6. yield i // 返回并记录函数状态
    7. }
    8. }
    9. var f = f()
    10. console.log(f.next()) // { value: 0, done: false }
    11. console.log(f.next()) // { value: 1, done: false }
    12. console.log(f.next()) // { value: 2, done: false }
    13. console.log(f.next()) // { value: 3, done: false }
    14. console.log(f.next()) // { value: 4, done: false }
    15. console.log(f.next()) // { value: undefined, done: true }
    16. /*
    17. 每调用一次 next,就执行一次 yield | 依靠这种需要才生产的工作机制,大大的节省资源
    18. */