Generator函数next传入参数执行结果:为什么是以下结果?
function* foo(x) {
var y = 2 * (yield (x + 1));
var z = yield (y / 3);
return (x + y + z);
}
var a = foo(5);
a.next() // Object{value:6, done:false}
a.next() // Object{value:NaN, done:false}
a.next() // Object{value:NaN, done:true}
var b = foo(5);
b.next() // { value:6, done:false }
b.next(12) // { value:8, done:false }//?
b.next(13) // { value:42, done:true }//?
首先还是要详读一下generator的文档:https://developer.mozilla.org...
其次来逐步分析:调用next表示将执行权交回生成器函数内部,如果有参数将其作为yield表达式的值,生成器函数内部的逻辑继续。b.next()将x+1的值返回,得到6这个没问题。b.next(12)表示yield(x+1)将以12继续往下执行,处理到y/3返回得到了24/3=8。以此类推,b.next(13)就得到5+24+13=42