Confused about javascript generator function -
why value of final b not 24 18?
think when function s2 called last time, a 12 , last 2, b should equal 12 * 2 = 24.
let = 1, b = 2; function* foo() { a++; yield; b = b * a; = (yield b) + 3; } function* bar() { b--; yield; = (yield 8) + b; b = * (yield 2); } function step(gen) { let = gen(); let last; return function () { last = it.next(last).value; }; } let s1 = step(foo); let s2 = step(bar); s2(); //b=1 last=undefined s2(); //last=8 s1(); //a=2 last=undefined s2(); //a=9 last=2 s1(); //b=9 last=9 s1(); //a=12 s2(); //b=24 console.log(a, b);
in last line of bar function:
b = * (yield 2); the code ran a * before running (yield 2). seem a evaluated @ point.
if move multiplication a after (yield 2), seems a evaluated after (yield 2) run, thereby ensuring date value of a.
so last line of bar function become:
b = (yield 2) * a; this can seen in example below.
let = 1, b = 2; function* foo() { a++; yield; b = b * a; = (yield b) + 3; } function* bar() { b--; yield; = (yield 8) + b; b = (yield 2) * a; } function step(gen) { let = gen(); let last; return function () { last = it.next(last).value; }; } let s1 = step(foo); let s2 = step(bar); s2(); //b=1 last=undefined s2(); //last=8 s1(); //a=2 last=undefined s2(); //a=9 last=2 s1(); //b=9 last=9 s1(); //a=12 s2(); //b=24 console.log(a, b);
Comments
Post a Comment