在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ 關(guān)于(不知道的js中 yield的問題)

關(guān)于(不知道的js中 yield的問題)

function step(gen) {
    var it = gen();
    var last;

    return function () {
        last = it.next(last).value;
    }
}

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; 
    console.log("這個時候的a",a); //9
    b = a * (yield 2); 
}

// 確保重新設(shè)置a和b
a = 1;
b = 2;
var s1 = step(foo);
var s2 = step(bar);
//s2 和s1 的返回時獨立的
s2(); 
s2(); 
s1();
s2(); 
s1(); 
s1(); //倒數(shù)第二步
// 
console.log('最后一步之前a', a, 'b', b);
s2(); //最后一步
console.log('a', a, 'b', b);

我的疑惑就是,為什么倒數(shù)第二步的時候,a作為全局變量已經(jīng)被改成12了,最后一步s2,
執(zhí)行 b = a (yield 2)這個表達(dá)式除了yiled 2 左邊的部分,按邏輯上應(yīng)該是b = a2;
為啥b最后返回了一個18????。。。執(zhí)行最后一步s2的時候,a的值還是9?

回答
編輯回答
柚稚

不要再糾結(jié)yield,使用async await。

2018年4月26日 08:51
編輯回答
凝雅

加了兩句輸出
明顯可以看到 “a到底是幾==”這個輸出在 “a最后賦值=======” 之前
函數(shù)停止之前a已經(jīng)獲取到值了

function* foo() {
    a++;
    yield;
    b = b * a;
    a = (yield b) + 3;
    console.log("a最后賦值=======",a)//在這里 a在s1中最后賦值
}
function* bar() {
    b--;
    yield;
    a = (yield 8) + b;
    console.log("這個時候的a", a); //9
    b = console.log("a到底是幾==",a) * (yield 2);//因為程序運行到*這里的時候停止了所有此時a已經(jīng)獲取到值了
    //假如寫成下面這樣
    //b = (yield 2)*a;結(jié)果就不一樣了 同樣函數(shù)在*這里停止 重新運行之后a才獲取
}
2018年8月9日 21:43