求教为什么b是18,不是24?
var a = 1;
var 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) {
var it = gen();
var last;
return function() {
// whatever is `yield`ed out, just
// send it right back in the next time!
last = it.next( last ).value;
};
}
a = 1;
b = 2;
var s1 = step( foo );
var s2 = step( bar );
s2(); // b--;
s2(); // yield 8
s1(); // a++;
s2(); // a = 8 + b;
// yield 2
s1(); // b = b * a;
// yield b
s1(); // a = b + 3;
s2(); // b = a * 2;
问题主要出在
bar
的最后一句:b = a * (yield 2);
这里。执行到这里时,
a
的值为9
,然后在后半句那里暂停。虽然后面两次调用s1
导致a
的值变为了12
,但不会影响到这条语句中的a
,因为在此之前就已经完成了对a
的取值,所以最后执行的是9 * 2
,而不是12 * 2
。