真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

ES6的Generator函數(shù)執(zhí)行機(jī)制是什么

本篇內(nèi)容主要講解“ES6的Generator函數(shù)執(zhí)行機(jī)制是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“ES6的Generator函數(shù)執(zhí)行機(jī)制是什么”吧!

成都創(chuàng)新互聯(lián)公司服務(wù)項目包括鹽都網(wǎng)站建設(shè)、鹽都網(wǎng)站制作、鹽都網(wǎng)頁制作以及鹽都網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,鹽都網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到鹽都省份的部分城市,未來相信會繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

ES6 新引入了 Generator 函數(shù),可以通過 yield 關(guān)鍵字,把函數(shù)的執(zhí)行流掛起,為改變執(zhí)行流程提供了可能,從而為異步編程提供解決方案。

Generator 函數(shù)組成

Generator 有兩個區(qū)分于普通函數(shù)的部分

一是在 function 后面,函數(shù)名之前有個 * ;

函數(shù)內(nèi)部有 yield 表達(dá)式。

其中 * 用來表示函數(shù)為 Generator 函數(shù),yield 用來定義函數(shù)內(nèi)部的狀態(tài)。

function* func(){ console.log("one"); yield '1'; console.log("two"); yield '2'; 
 console.log("three"); return '3';}

執(zhí)行機(jī)制

調(diào)用 Generator 函數(shù)和調(diào)用普通函數(shù)一樣,在函數(shù)名后面加上()即可,但是 Generator 函數(shù)不會像普通函數(shù)一樣立即執(zhí)行,而是返回一個指向內(nèi)部狀態(tài)對象的指針,所以要調(diào)用遍歷器對象Iterator 的 next 方法,指針就會從函數(shù)頭部或者上一次停下來的地方開始執(zhí)行。

f.next();// one// {value: "1", done: false} f.next();// two// {value: "2", done: false} f.next();// three// {value: "3", done: true} f.next();// {value: undefined, done: true}

第一次調(diào)用 next 方法時,從 Generator 函數(shù)的頭部開始執(zhí)行,先是打印了 one ,執(zhí)行到 yield 就停下來,并將yield 后邊表達(dá)式的值 '1',作為返回對象的 value 屬性值,此時函數(shù)還沒有執(zhí)行完, 返回對象的 done 屬性值是 false。

第二次調(diào)用 next 方法時,同上步 。

第三次調(diào)用 next 方法時,先是打印了 three ,然后執(zhí)行了函數(shù)的返回操作,并將 return 后面的表達(dá)式的值,作為返回對象的 value 屬性值,此時函數(shù)已經(jīng)結(jié)束,多以 done 屬性值為true 。

第四次調(diào)用 next 方法時, 此時函數(shù)已經(jīng)執(zhí)行完了,所以返回 value 屬性值是 undefined ,done 屬性值是 true 。如果執(zhí)行第三步時,沒有 return 語句的話,就直接返回 {value: undefined, done: true}。

函數(shù)返回的遍歷器對象的方法

next 方法

一般情況下,next 方法不傳入?yún)?shù)的時候,yield 表達(dá)式的返回值是 undefined 。當(dāng) next 傳入?yún)?shù)的時候,該參數(shù)會作為上一步y(tǒng)ield的返回值。

next不傳參

除了使用 next ,還可以使用 for... of 循環(huán)遍歷 Generator 函數(shù)生產(chǎn)的 Iterator 對象。

return 方法

return 方法返回給定值,并結(jié)束遍歷 Generator 函數(shù)。

return 方法提供參數(shù)時,返回該參數(shù);不提供參數(shù)時,返回 undefined 。

遍歷器對象拋出了兩個錯誤,第一個被 Generator 函數(shù)內(nèi)部捕獲,第二個因為函數(shù)體內(nèi)部的catch 函數(shù)已經(jīng)執(zhí)行過了,不會再捕獲這個錯誤,所以這個錯誤就拋出 Generator 函數(shù)體,被函數(shù)體外的 catch 捕獲。

yield* 表達(dá)式

yield* 表達(dá)式表示 yield 返回一個遍歷器對象,用于在 Generator 函數(shù)內(nèi)部,調(diào)用另一個 Generator 函數(shù)。

使用場景

實現(xiàn) Iterator

為不具備 Iterator 接口的對象提供遍歷方法。

Reflect.ownKeys() 返回對象所有的屬性,不管屬性是否可枚舉,包括 Symbol。
jane 原生是不具備 Iterator 接口無法通過 for... of遍歷。這邊用了 Generator 函數(shù)加上了 Iterator 接口,所以就可以遍歷 jane 對象了。

到此,相信大家對“ES6的Generator函數(shù)執(zhí)行機(jī)制是什么”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!


網(wǎng)頁題目:ES6的Generator函數(shù)執(zhí)行機(jī)制是什么
文章鏈接:http://weahome.cn/article/pgdehd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部