1.Generator函数的调用方法与普通函数一样,也是在函数名后面加上一对圆括号。不同的是,调用Generator函数后,该函数并不执行,返回的 也不是函数运行结果,而是一个指向内部状态的指针对象, 下一步,必须调用遍历器对象的next方法,使得指针移向下一个状态。也就是说,每次调用next方法,内部指针就从函数头部或上一次停下来的地方 开始执行,直到遇到下一个yield语句(或return语句)为止。换言之,Generator函数是分段执行的,yield语句是暂停执行的标记,而next方法可 以恢复执行。
function* helloWorldGenerator() {
yield 'hello';
yield 'world';
return 'ending';
}
var hw = helloWorldGenerator();
console.log(hw.next()); {value: "hello", done: false}
console.log(hw.next()); {value: "world", done: false}
console.log(hw.next()); {value: "ending", done: true}
next方法返回一个对象,它的value属性就是当前yield语句的值 ,done属性的值false,表示遍历还没有结束。
2.yield句本身没有返回值,或者说总是返回undefined。next方法可以带一个参数,该参数就会被当作上一个yield语句的返回值。