您好,登錄后才能下訂單哦!
這篇文章主要介紹了ES6中生成器函數(shù)的示例分析,具有一定借鑒價(jià)值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。
其實(shí)前幾章我都不知道怎么寫,因?yàn)樗麄兛偸巧婕暗揭恍┍容^深的東西,比如可迭代對(duì)象
、生成器
、迭代器
之類的東西,等寫完這個(gè)系列,再好好整理一下這些東西可能會(huì)好一點(diǎn),現(xiàn)在整理到哪兒就寫到哪兒吧
function* name([param[, param[, ... param]]]) { statements }
使用function*作為聲明標(biāo)識(shí)符,表示這是一個(gè)生成器函數(shù)
name是函數(shù)名
param是參數(shù)名,可以255個(gè)
statements是函數(shù)體
生成器函數(shù)在執(zhí)行的時(shí)候是可以暫停的,需要的時(shí)候再繼續(xù)執(zhí)行
生成器函數(shù)返回的是一個(gè)迭代器對(duì)象,不會(huì)立即執(zhí)行
生成器函數(shù)可以使用return,但是return之后將不可再迭代
function* idMaker(begin=0){ while(true) yield begin++; } let maker=idMaker(0) console.log(maker.next().value) // 0 console.log(maker.next().value) // 1 console.log(maker.next().value) // 2 console.log(maker.next().value) // 3 ...
說明:
調(diào)用生成器函數(shù)返回的是一個(gè)迭代器,迭代器是一個(gè)滿足迭代器協(xié)議的對(duì)象,簡(jiǎn)單的說,迭代器對(duì)象有一定有一個(gè)next函數(shù),該函數(shù)返回一個(gè)對(duì)象,我們稱之為迭代結(jié)果對(duì)象,該對(duì)象包含以下兩個(gè)屬性:
value:本次迭代的結(jié)果
done:布爾值,如果為true,表示無法再繼續(xù)迭代,如果為false,表示可以繼續(xù)迭代。
調(diào)用next函數(shù),將會(huì)讓生成器函數(shù)真正的執(zhí)行,一直執(zhí)行,直到遇見yield,并返回迭代結(jié)果對(duì)象
id
增長(zhǎng)器function* idMaker(begin=0){ while(begin<3) yield begin++; } let maker=idMaker(0) console.log(maker.next()) // {value: 0, done: false} console.log(maker.next()) // {value: 1, done: false} console.log(maker.next()) // {value: 2, done: false} console.log(maker.next()) // {value: undefined, done: true}
如果函數(shù)執(zhí)行完成了,那么done就自動(dòng)變成true
function *createIterator() { let first = yield 1; let second = yield first + 2; // 4 + 2 // first =4 是next(4)將參數(shù)賦給上一條的 yield second + 3; // 5 + 3 } let iterator = createIterator(); console.log(iterator.next()); // "{ value: 1, done: false }" console.log(iterator.next(4)); // "{ value: 6, done: false }" console.log(iterator.next(5)); // "{ value: 8, done: false }" console.log(iterator.next()); // "{ value: undefined, done: true }"
這個(gè)解釋起來挺麻煩,第一次調(diào)用iterator.next(),返回1,代碼停在了yield 1,但是我們將yield 1的結(jié)果保存在了first變量中,其實(shí)這個(gè)操作是沒有發(fā)生的,當(dāng)我們第二次執(zhí)行iterator.next(4),注意這里傳遞了一個(gè)參數(shù)4,此時(shí)會(huì)把4當(dāng)做yield 1的返回值,賦值給first,所以第二次執(zhí)行可以看做是let first=4的這么一個(gè)執(zhí)行順序。
function* yieldAndReturn() { yield "1"; return "2"; yield "3"; } var gen = yieldAndReturn() console.log(gen.next()); // { value: "1", done: false } console.log(gen.next()); // { value: "2", done: true } console.log(gen.next()); // { value: undefined, done: true }
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享ES6中生成器函數(shù)的示例分析內(nèi)容對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,遇到問題就找億速云,詳細(xì)的解決方法等著你來學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。