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貢獻19條經驗 獲得超12個贊
代碼執行到 yield 時候才會交出執行權.
?你認為是24是因為你認為bar最后一次執行時候a應該是12,其實a在s2執行yield 2時候已經賦值為9了,因為計算是從左到右執行的,
你可以結合下面的代碼感受下
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
添加回答
舉報
0/150
提交
取消