首页 > es6中的generator

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

【热门文章】
【热门文章】