问答

《你不知道的javascript》[中篇] generator有关如下代码运行结果

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

!DOCTYPE htmlhtmlhead meta charset="utf-8" meta http-equiv="X-UA-Compatible" content="IE=edge" title/title link rel="stylesheet" href=""/headbodyscrip...

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

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

###

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

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

相关文章
  • 《你不知道的javascript》[中篇] gener

    《你不知道的javascript》[中篇] gener

  • H5强制横屏,安卓上下滑为左右滚动,左

    H5强制横屏,安卓上下滑为左右滚动,左

  • vue 循环列表随机背景颜色如何固定住?

    vue 循环列表随机背景颜色如何固定住?

  • :before和:after的absolute定位错误问

    :before和:after的absolute定位错误问

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