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