function step(gen) {
const it = gen();
let last;
return function() {
last = it.next(last).value;
};
}
function* foo() {
a++;
yield;
b *= a;
a = (yield b) + 3;
}
function* bar() {
b--;
yield;
a = (yield 8) + b;
b = a * (yield 2);
}
var a = 1;
var b = 2;
const s1 = step(foo);
const s2 = step(bar);
s2();
s2();
s1();
s2();
s1();
s1();
s2();
console.log(a, b); // 12 18
最后一步运行 s2()
的时候 a = 12 , b = 9
,然后执行 b = a * 2
,最后应该输出12 24
才对啊
你可以观察一下下面两种写法的区别。