function* gen(){ yield "jiang"; yield "teng"; yield "fei";}// 为什么3次输出都是一样的呢?因为每次调用gen()都相当于new一个对象。gen().next() // {value: "jiang", done: false}gen().next() // {value: "jiang", done: false}gen().next() // {value: "jiang", done: false}// 应该存到一个变量里const a = gen();a.next() // {value: "jiang", done: false}a.next() // {value: "teng", done: false}a.next() // {value: "fei", done: false}a.next() // {value: undefined, done: true}
有返回值的Generater函数 ⭐️
function* gen(){ yield "jiang"; yield "teng"; yield "fei"; return "jiangtengfei";}// 应该存到一个变量里const a = gen();a.next() // {value: "jiang", done: false}a.next() // {value: "teng", done: false}a.next() // {value: "fei", done: false}a.next() // {value: "jiangtengfei", done: true} 返回值作为最后的value
yield 没有返回值
function* gen(){ var x = yield "jiang"; console.log(x); var y = yield "teng"; var z = yield "fei";}const a = gen();a.next() // {value: "jiang", done: false}// 在第二次调用next的时候,才开始执行console.log(x)// 因为 yield "jiang" 不返回任何值,所以x 是undefineda.next() // 执行console.log(x) undefined// {value: "teng", done: false}
测试一个有返回值的yield
function abc(){ return { name:"jiang" }}function* gen(){ var x = yield abc(); console.log(x); var y = yield "teng"; var z = yield "fei";}const a = gen();a.next() // {value: {name:"jiang"}, done: false}// 在第二次调用next的时候,才开始执行console.log(x)// x 是undefineda.next() // 执行console.log(x) undefined// {value: "teng", done: false}