這篇文章主要介紹了ES6中生成器函數(shù)的示例分析,具有一定借鑒價(jià)值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。
目前創(chuàng)新互聯(lián)已為1000多家的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬空間、網(wǎng)站運(yùn)營(yíng)、企業(yè)網(wǎng)站設(shè)計(jì)、隨縣網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。概述其實(shí)前幾章我都不知道怎么寫(xiě),因?yàn)樗麄兛偸巧婕暗揭恍┍容^深的東西,比如可迭代對(duì)象
、生成器
、迭代器
之類(lèi)的東西,等寫(xiě)完這個(gè)系列,再好好整理一下這些東西可能會(huì)好一點(diǎn),現(xiàn)在整理到哪兒就寫(xiě)到哪兒吧
function* name([param[, param[, ... param]]]) { statements }
使用function*作為聲明標(biāo)識(shí)符,表示這是一個(gè)生成器函數(shù)
name是函數(shù)名
param是參數(shù)名,可以255個(gè)
statements是函數(shù)體
特點(diǎn)生成器函數(shù)在執(zhí)行的時(shí)候是可以暫停的,需要的時(shí)候再繼續(xù)執(zhí)行
生成器函數(shù)返回的是一個(gè)迭代器對(duì)象,不會(huì)立即執(zhí)行
生成器函數(shù)可以使用return,但是return之后將不可再迭代
栗子-無(wú)限id增長(zhǎng)器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 ...
說(shuō)明:
調(diào)用生成器函數(shù)返回的是一個(gè)迭代器,迭代器是一個(gè)滿足迭代器協(xié)議的對(duì)象,簡(jiǎn)單的說(shuō),迭代器對(duì)象有一定有一個(gè)next函數(shù),該函數(shù)返回一個(gè)對(duì)象,我們稱(chēng)之為迭代結(jié)果對(duì)象,該對(duì)象包含以下兩個(gè)屬性:
value:本次迭代的結(jié)果
done:布爾值,如果為true,表示無(wú)法再繼續(xù)迭代,如果為false,表示可以繼續(xù)迭代。
調(diào)用next函數(shù),將會(huì)讓生成器函數(shù)真正的執(zhí)行,一直執(zhí)行,直到遇見(jiàn)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
next接收參數(shù)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è)解釋起來(lái)挺麻煩,第一次調(diào)用iterator.next(),返回1,代碼停在了yield 1,但是我們將yield 1的結(jié)果保存在了first變量中,其實(shí)這個(gè)操作是沒(méi)有發(fā)生的,當(dāng)我們第二次執(zhí)行iterator.next(4),注意這里傳遞了一個(gè)參數(shù)4,此時(shí)會(huì)把4當(dāng)做yield 1的返回值,賦值給first,所以第二次執(zhí)行可以看做是let first=4的這么一個(gè)執(zhí)行順序。
returnfunction* 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í)也希望大家多多支持創(chuàng)新互聯(lián)建站,關(guān)注創(chuàng)新互聯(lián)網(wǎng)站制作公司行業(yè)資訊頻道,遇到問(wèn)題就找創(chuàng)新互聯(lián)建站,詳細(xì)的解決方法等著你來(lái)學(xué)習(xí)!
本文題目:ES6中生成器函數(shù)的示例分析-創(chuàng)新互聯(lián)
瀏覽路徑:http://jinyejixie.com/article4/csdgoe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗(yàn)、商城網(wǎng)站、電子商務(wù)、手機(jī)網(wǎng)站建設(shè)、面包屑導(dǎo)航、動(dòng)態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容