function* 声明
function* 声明(function关键字后跟一个星号)定义一个generator(生成器)函数,返回一个Generator对象。
生成器是一种可以从中退出并在之后重新进入的函数。生成器的环境(绑定的变量)会在每次执行后被保存,下次进入时可继续使用。
调用一个生成器函数并不马上执行它的主体,而是返回一个这个生成器函数的迭代器(iterator)对象。当这个迭代器的next()方法被调用时,生成器函数的主体会被执行直至第一个
yield
表达式,该表达式定义了迭代器返回的值,或者,被 yield*
委派至另一个生成器函数。next()方法返回一个对象,该对象有一个
value属性,表示产出的值,和一个done属性,表示生成器是否已经产出了它最后的值。
yield
function* idMaker(){ var index = 0; while(index<3) yield index++; } var gen = idMaker(); console.log(gen.next().value); // 0 console.log(gen.next().value); // 1 console.log(gen.next().value); // 2 console.log(gen.next().value); // undefined
yield*
function* anotherGenerator(i) { yield i + 1; yield i + 2; yield i + 3; } function* generator(i){ yield i; yield* anotherGenerator(i); yield i + 10; } var gen = generator(10); console.log(gen.next().value); // 10 console.log(gen.next().value); // 11 console.log(gen.next().value); // 12 console.log(gen.next().value); // 13 console.log(gen.next().value); // 20