javascript - es6中的generator
本文介绍了javascript - 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
。
这篇关于javascript - es6中的generator的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文