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 是undefined
a.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 是undefined
a.next()
// 执行console.log(x) undefined
// {value: "teng", done: false}