function* f() {
for (let i = 0; true; i++) {
//yield表达式本身是没有返回值,或者说是返回undefined
let reset = yield i
console.log("reset", reset)
if (reset) { i = -1 }
}
}
var g = f()
console.log(g.next())
console.log(g.next())
//next方法可以带一个参数,改参数就会被作为上一个yield表达式的返回值
console.log(g.next(true))
console.log("-------------------")
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())
console.log("-------------------")
var b=foo(5)
console.log(b.next())
console.log(b.next(12))
console.log(b.next(13))