关于你所不知道的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。请求有明白的大佬能帮助我理解一下。谢谢宁

// 以下是书中的内容

关于你所不知道的JavaScript一书中迭代器中 yield 用法的不理解
关于你所不知道的JavaScript一书中迭代器中 yield 用法的不理解
关于你所不知道的JavaScript一书中迭代器中 yield 用法的不理解
关于你所不知道的JavaScript一书中迭代器中 yield 用法的不理解

回答

算术表达式是从左到右执行的。
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

回到顶部