ES6-Generator 函數(shù)的語法

Generator 是一種異步函數(shù)解決方案;語法和傳統(tǒng)的方法完全不相同;Generator有多種解釋;首先可以把它理解成內(nèi)部有多種狀態(tài);Generator是一種狀態(tài)機(jī)內(nèi)部有多種狀態(tài);
Generator 有兩個(gè)關(guān)鍵特征;首先每個(gè)函數(shù)都帶一個(gè)* 第二個(gè)就是每個(gè)函數(shù)都 第二個(gè)就是函數(shù)內(nèi)部使用yield函數(shù);定義不同的內(nèi)部狀態(tài);

function* helloWolidgenerator(){
 yield 'hello';
 yield 'world';
return 'ending';
};

上面定義Generator函數(shù);里面定義三個(gè)狀態(tài)一個(gè)是'hello' 'world' 以及return;每一個(gè)yield就是一個(gè)函數(shù);
另外就是調(diào)用方法的問題;Generator的調(diào)用不像其他函數(shù)一樣就是直接使用();在Generator上交過()后;函數(shù)并不執(zhí)行;只是返回了函數(shù)的一個(gè)指針;及內(nèi)部狀態(tài)的指針;

var hw=helloWorldgenertor();
下一步,必須調(diào)用遍歷器對(duì)象的next方法,
使得指針移向下一個(gè)狀態(tài)。也就是說,每次調(diào)用next方法,
內(nèi)部指針就從函數(shù)頭部或上一次停下來的地方開始執(zhí)行,
直到遇到下一個(gè)yield表達(dá)式(或return語句)為止。
換言之,Generator 函數(shù)是分段執(zhí)行的,yield表達(dá)式是暫停執(zhí)行的標(biāo)記,
而next方法可以恢復(fù)執(zhí)行。
hw.next()
// { value: 'hello', done: false }

hw.next()
// { value: 'world', done: false }

hw.next()
// { value: 'ending', done: true }

hw.next()
// { value: undefined, done: true }

第一次調(diào)用,Generator 函數(shù)開始執(zhí)行,直到遇到第一個(gè)yield表達(dá)式為止。next方法返回一個(gè)對(duì)象,它的value屬性就是當(dāng)前yield表達(dá)式的值hello,done屬性的值false,表示遍歷還沒有結(jié)束。

第二次調(diào)用,Generator 函數(shù)從上次yield表達(dá)式停下的地方,一直執(zhí)行到下一個(gè)yield表達(dá)式。next方法返回的對(duì)象的value屬性就是當(dāng)前yield表達(dá)式的值world,done屬性的值false,表示遍歷還沒有結(jié)束。

第三次調(diào)用,Generator 函數(shù)從上次yield表達(dá)式停下的地方,一直執(zhí)行到return語句(如果沒有return語句,就執(zhí)行到函數(shù)結(jié)束)。next方法返回的對(duì)象的value屬性,就是緊跟在return語句后面的表達(dá)式的值(如果沒有return語句,則value屬性的值為undefined),done屬性的值true,表示遍歷已經(jīng)結(jié)束。

第四次調(diào)用,此時(shí) Generator 函數(shù)已經(jīng)運(yùn)行完畢,next方法返回對(duì)象的value屬性為undefined,done屬性為true。以后再調(diào)用next方法,返回的都是這個(gè)值。

總結(jié)一下,調(diào)用 Generator 函數(shù),返回一個(gè)遍歷器對(duì)象,代表 Generator 函數(shù)的內(nèi)部指針。以后,每次調(diào)用遍歷器對(duì)象的next方法,就會(huì)返回一個(gè)有著value和done兩個(gè)屬性的對(duì)象。value屬性表示當(dāng)前的內(nèi)部狀態(tài)的值,是yield表達(dá)式后面那個(gè)表達(dá)式的值;done屬性是一個(gè)布爾值,表示是否遍歷結(jié)束。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容