问答

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

作者:admin 2021-05-06 我要评论

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)...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)
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

###

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

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

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

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • 关于你所不知道的JavaScript一书中迭代

    关于你所不知道的JavaScript一书中迭代

  • ERROR in   Error: Child compilation

    ERROR in Error: Child compilation

  • iview里面的menu组件如何实现三级菜单

    iview里面的menu组件如何实现三级菜单

  • 微信小程序上生成二维码,商户扫用户小

    微信小程序上生成二维码,商户扫用户小

腾讯云代理商
海外云服务器