javascript - es6中的generator

查看:112
本文介绍了javascript - es6中的generator的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

求教为什么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;

解决方案

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

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

这篇关于javascript - es6中的generator的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆