0
なぜb
の最終値は24ではなく18ですか?
私は2
ので、b
は12 * 2 = 24
と同じである必要がありa
が12
とlast
で、機能s2
が前回呼び出されたときだと思います。javascriptジェネレータ関数について混乱しました
bar
関数の最後の行で
let a = 1, b = 2;
function* foo() {
a++;
yield;
b = b * a;
a = (yield b) + 3;
}
function* bar() {
b--;
yield;
a = (yield 8) + b;
b = a * (yield 2);
}
function step(gen) {
let it = gen();
let last;
return function() {
last = it.next(last).value;
};
}
let s1 = step(foo);
let s2 = step(bar);
s2(); //b=1 last=undefined
s2(); //last=8
s1(); //a=2 last=undefined
s2(); //a=9 last=2
s1(); //b=9 last=9
s1(); //a=12
s2(); //b=24
console.log(a, b);