javascript - es6中的generator
怪我咯
怪我咯 2017-04-10 17:08:48
[JavaScript讨论组]

求教为什么b是18,不是24?

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);
}
function step(gen) {
    var it = gen();
    var last;

    return function() {
        // whatever is `yield`ed out, just
        // send it right back in the next time!
        last = it.next( last ).value;
    };
}
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;
怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(1)
PHP中文网

问题主要出在bar的最后一句:b = a * (yield 2);这里。

执行到这里时,a的值为9,然后在后半句那里暂停。虽然后面两次调用s1导致a的值变为了12,但不会影响到这条语句中的a,因为在此之前就已经完成了对a的取值,所以最后执行的是9 * 2,而不是12 * 2

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号