// function*这种声明方式 (`function`关键字后跟一个星号)会定义一个生成器函数(generator function),它返回一个生成器对象。
// function*为生成器函数后面带一个星号,通常和yield关键字使用
function* foo(index) {
while (index < 2) {
//yield 会在执行生成器函数对象的next的方法时,返回yield后面的值
//当然
yield index;
index++;
}
}
const iterator = foo(0);
console.log(iterator.next().value);
// expected output: 0
console.log(iterator.next().value);
// expected output: 1
// 调用 next()方法时,如果传入了参数,那么这个参数会传给上一条执行的 yield 语句左边的变量.
function *gen(){
yield 10;
x=yield 'foo';
yield x;
}
var gen_obj=gen();
console.log(gen_obj.next());// 执行 yield 10,返回 10
console.log(gen_obj.next());// 执行 yield 'foo',返回 'foo'
console.log(gen_obj.next(100));// 将 100 赋给上一条 yield 'foo' 的左值,即执行 x=100,返回 100
console.log(gen_obj.next());// 执行完毕,value 为 undefined,done 为 true