好深奧的生成器函數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
相關文章
相關標籤/搜索