好深奥的生成器函数function*

function* 声明(function关键字后跟一个星号)定义了一个生成器函数(generator function),它返回一个Generator对象express

也能够定义生成器函数使用构造函数GeneratorFunction和一个function* expression.函数

##语法code

function* name(param){statements}
// name 函数名
// param 要传递给函数的一个参数名称。一个函数最多能够有255个参数。

##描述 生成器是一种能够从中退出并在以后从新进入的函数。生成器的环境(绑定的变量)会在每次执行后被保存,下次进入时能够继续使用。对象

调用一个生成器并不立刻执行它的主体,而是返回一个这个生成器的迭代器(iterator)对象.当这个迭代器next()方法被调用时,生成器函数的主体会被执行直至第一个yield表达式,该表达式定义了迭代器返回的值,或者被yield*委派至另外一个生成器函数。next()方法返回一个对象,该对象有一个value属性,表示产出的值,和一个done属性,表示生成器是否已经产出了它的最后的值。generator

##示例 简单的示例it

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* 的示例io

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
相关文章
相关标签/搜索