关于你所不知道的JavaScript一书中迭代器中 yield 用法的不理解
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
函数如下:
function *bar() { b--;
yield;
a = (yield 8) + b;
b = (yield 2) * a; // 调换下运算数位置
}
此时最终的结果就变成了12 24
以上是 关于你所不知道的JavaScript一书中迭代器中 yield 用法的不理解 的全部内容, 来源链接: utcz.com/a/107763.html