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);
}
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;
console.log( a, b ); // 12 18
// 不明白的是 为什么最后输出的 b是 18 而我算是24。请求有明白的大佬能帮助我理解一下。谢谢宁
// 以下是书中的内容
算术表达式是从左到右执行的。
当
s2
执行到b = a * (yield 2)
时,先计算变量a
的值,然后执行(yield 2)
。修改下
bar
函数如下:此时最终的结果就变成了
12 24