最近在看generator,我们知道iterator里面的iter.next(value) 是generator() 下一个yield的里面的返回值 和yield expression, expression 本身的返回值没有关系,如下。
function test2() {
function* gen2(arg){
console.log("gen2 arg:" + arg);
var a = yield 1;
console.log("a:" + a);
var b = yield 2;
console.log("b:" + b);
return 'finished';
}
var iter = gen2(6);
iter.next(7); // { value:1, done:false }
iter.next(8); // { value:2, done:false }
iter.next(9); // { value:'finished', done:true }
}
test2(); 结果如下
gen2 arg:6
a:8
b:9
问题是第一个iter.next(7); 当中的7传给谁了?跑到哪里去了,怎样才能在generator当中获得? 这样设计的目的是啥?
7应该是取不到,next参数会被当作上一个yield语句的返回值,然而在传7的时候没有上一个返回值,传8的时候上一个返回值是a,so,第一个next传参是没意义的。