yuqingzhijie3596863
2017-09-16 12:50:10
<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Document</title><script type="text/javascript">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() {last = it.next( last ).value;console.log( a, b, last );};}var s1 = step( foo );var s2 = step( bar );s2();s2();s1();s2();s1();s1();s2();console.log( a, b );</script></head><body></body></html>
2 回答
已采納

fdsgasgg
TA貢獻(xiàn)19條經(jīng)驗(yàn) 獲得超12個(gè)贊
代碼執(zhí)行到 yield 時(shí)候才會交出執(zhí)行權(quán).
?你認(rèn)為是24是因?yàn)槟阏J(rèn)為bar最后一次執(zhí)行時(shí)候a應(yīng)該是12,其實(shí)a在s2執(zhí)行yield 2時(shí)候已經(jīng)賦值為9了,因?yàn)橛?jì)算是從左到右執(zhí)行的,
你可以結(jié)合下面的代碼感受下
function*?gen1(){ ????console.log('g1',?a?*?(yield?2)) } function*?gen2(){ ????console.log('g2',?(yield?2)?*?a) } var?g1?=?gen1(),?g2?=?gen2(),?a?=?9 g1.next() g2.next() a?=?12 g1.next(2)?//?18 g2.next(2)?//?24
添加回答
舉報(bào)
0/150
提交
取消