《你不知道的javascript》[中篇] generator有关如下代码运行结果为啥是 12 18, 自己计算12 24

发布于 2022-09-12 13:39:25 字数 745 浏览 25 评论 0

<!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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

孤千羽 2022-09-19 13:39:25

重点应该是第四个调用,即第三个 s2()。这个时候恢复执行的位置是 a = 8 + b,得到 a9,然后在 b = 9 * (yield 2) 的时候又暂停,这个时候 a 应该就已经是 9。最后一步调用的时候计算的应该是 9 * 2

雪落纷纷 2022-09-19 13:39:25

image.png
感谢!搞懂了,yield再次启动拿上次停下的值计算

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文