《你不知道的javascript》[中篇] generator有关如下代码运行结果为啥是 12 18, 自己计算12 24
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title></title>
<link rel="stylesheet" href="">
</head>
<body>
<script >
let a = 1;
let 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);
}
function step(gen) {
var it = gen();
var last;
return function() {
last = it.next(last).value
}
}
var s1 = step(foo);
var s2 = step(bar);
s2();
s2();
s1();
s2();
s1();
s1();
s2();
console.log(a,b)
</script>
</body>
</html>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
重点应该是第四个调用,即第三个
s2()
。这个时候恢复执行的位置是a = 8 + b
,得到a
是9
,然后在b = 9 * (yield 2)
的时候又暂停,这个时候 a 应该就已经是 9。最后一步调用的时候计算的应该是9 * 2
。感谢!搞懂了,yield再次启动拿上次停下的值计算