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}