我有以下代码
function coroutine(g) {
var it = g();
return () => it.next.apply(it, arguments);
// also tried () => { return it.next.apply(it, arguments);
}
var run = coroutine(function* () {
var x = 1 + (yield);
var y = 1 + (yield);
yield (x + y);
});
以下测试已经执行。
run()
{value: undefined, done: false}
run(10)
{value: undefined, done: false}
run(30).value
"1function* () { var x = 1 + (yield); var y = 1 + (yield); yield (x + y);}1function* () { var x = 1 + (yield); var y = 1 + (yield); yield (x + y);}"
但是,最后run(30).value
不应该返回42
的值吗?
但是,在将箭头功能更改为旧的匿名功能后,它可以正常工作吗?
function coroutine(g) {
var it = g();
return function() { return it.next.apply(it, arguments) };
}