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

// 以下是书中的内容

image.png
image.png
image.png
image.png

阅读 898
1 个回答

算术表达式是从左到右执行的。
s2执行到b = a * (yield 2)时,先计算变量a的值,然后执行(yield 2)
修改下bar函数如下:

function *bar() { 
 b--; 
 yield; 
 a = (yield 8) + b; 
 b = (yield 2) * a; // 调换下运算数位置
}

此时最终的结果就变成了12 24

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题