generator 不同于普通的函数,执行方式有区别
function* foo() { yield 1; console.log(yield); } let fooObj = foo(); console.log(fooObj.next()); console.log(fooObj.next()); console.log(fooObj.next());
第一个fooObj.next() 返回Object {value: 1, done: false}
此时fooObj指针指向的是yield 1(第一个yield)
第二次运行fooObj.next(), 指针指向console.log(yield)中的yield
即第二个yeild,此时函数返回Object {value: undefined, done: false}
第三次运行fooObj.next(), 指针继续向后移动,开始执行console.log(yield)
语句,由于next参数为undefined,则指定上一次(即第二次yeild)yeild为undefined
所以打印出undefined 和
Object {value: undefined, done: true}