function step(gen) {
var it = gen();
var last;
return function () {
last = it.next(last).value;
}
}
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;
console.log("这个时候的a",a); //9
b = a * (yield 2);
}
// 确保重新设置a和b
a = 1;
b = 2;
var s1 = step(foo);
var s2 = step(bar);
//s2 和s1 的返回时独立的
s2();
s2();
s1();
s2();
s1();
s1(); //倒数第二步
//
console.log('最后一步之前a', a, 'b', b);
s2(); //最后一步
console.log('a', a, 'b', b);
我的疑惑就是,为什么倒数第二步的时候,a作为全局变量已经被改成12了,最后一步s2,
执行 b = a (yield 2)这个表达式除了yiled 2 左边的部分,按逻辑上应该是b = a2;
为啥b最后返回了一个18????。。。执行最后一步s2的时候,a的值还是9?
加了两句输出
明显可以看到 “a到底是几==”这个输出在 “a最后赋值=======” 之前
函数停止之前a已经获取到值了