yield 语句本身没有返回值,或者说返回undefined。next()方法可以带有一个参数,改参数会被当做上一条yield的返回值;从而返回函数
function* foo(x) {
var y=2*(yield (x+1))
var z=yield (y/3)
return (x+y+z)
}
var a=foo(5)
console.log(a.next())
console.log(a.next())
console.log(a.next())
// 运行结果如下
// { value: 6, done: false }
// { value: NaN, done: false }
// { value: NaN, done: true }
var b=foo(6)
console.log(b.next())
console.log(b.next(8))
console.log(b.next(9))
// 运行结果
// { value: 7, done: false }
// { value: 5.333333333333333, done: false }
// { value: 31, done: true } x=6;y=16;z=9