1. function* gen(){
  2. yield "jiang";
  3. yield "teng";
  4. yield "fei";
  5. }
  6. // 为什么3次输出都是一样的呢?因为每次调用gen()都相当于new一个对象。
  7. gen().next() // {value: "jiang", done: false}
  8. gen().next() // {value: "jiang", done: false}
  9. gen().next() // {value: "jiang", done: false}
  10. // 应该存到一个变量里
  11. const a = gen();
  12. a.next() // {value: "jiang", done: false}
  13. a.next() // {value: "teng", done: false}
  14. a.next() // {value: "fei", done: false}
  15. a.next() // {value: undefined, done: true}

有返回值的Generater函数 ⭐️

  1. function* gen(){
  2. yield "jiang";
  3. yield "teng";
  4. yield "fei";
  5. return "jiangtengfei";
  6. }
  7. // 应该存到一个变量里
  8. const a = gen();
  9. a.next() // {value: "jiang", done: false}
  10. a.next() // {value: "teng", done: false}
  11. a.next() // {value: "fei", done: false}
  12. a.next() // {value: "jiangtengfei", done: true} 返回值作为最后的value

yield 没有返回值

  1. function* gen(){
  2. var x = yield "jiang";
  3. console.log(x);
  4. var y = yield "teng";
  5. var z = yield "fei";
  6. }
  7. const a = gen();
  8. a.next() // {value: "jiang", done: false}
  9. // 在第二次调用next的时候,才开始执行console.log(x)
  10. // 因为 yield "jiang" 不返回任何值,所以x 是undefined
  11. a.next()
  12. // 执行console.log(x) undefined
  13. // {value: "teng", done: false}

测试一个有返回值的yield

  1. function abc(){
  2. return {
  3. name:"jiang"
  4. }
  5. }
  6. function* gen(){
  7. var x = yield abc();
  8. console.log(x);
  9. var y = yield "teng";
  10. var z = yield "fei";
  11. }
  12. const a = gen();
  13. a.next() // {value: {name:"jiang"}, done: false}
  14. // 在第二次调用next的时候,才开始执行console.log(x)
  15. // x 是undefined
  16. a.next()
  17. // 执行console.log(x) undefined
  18. // {value: "teng", done: false}