国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Node v4 - Generator函數(shù)

cnTomato / 729人閱讀

摘要:返回的遍歷器對象,可以依次遍歷函數(shù)內(nèi)部的每一個狀態(tài)。方法調(diào)用遍歷器對象的方法,使得指針移向下一個狀態(tài)。運行結(jié)果就是使用一個遍歷器,遍歷了多個函數(shù),有遞歸的效果。

1、Generator簡介

基本概念

Generator函數(shù)有多種理解角度。從語法上,首先可以把它理解成,Generator函數(shù)是一個狀態(tài)機,封裝了多個內(nèi)部狀態(tài)。

執(zhí)行Generator函數(shù)會返回一個遍歷器對象,也就是說,Generator函數(shù)除了狀態(tài)機,還是一個遍歷器對象生成函數(shù)。返回的遍歷器對象,可以依次遍歷Generator函數(shù)內(nèi)部的每一個狀態(tài)。

形式上,Generator函數(shù)是一個普通函數(shù),但是有兩個特征。一是,function命令與函數(shù)名之間有一個星號;二是,函數(shù)體內(nèi)部使用yield語句,定義不同的內(nèi)部狀態(tài)(yield語句在英語里的意思就是“產(chǎn)出”)。

"use strict";
function * helloWorldGenerator() {
    yield "hello";
    yield "world";
    return "ending";
}
let hw = helloWorldGenerator();

上面代碼定義了一個Generator函數(shù)helloWorldGenerator,它內(nèi)部有兩個yield語句“hello”“world”,即該函數(shù)有三個狀態(tài):helloworldreturn語句(結(jié)束執(zhí)行)。

然后,Generator函數(shù)的調(diào)用方法與普通函數(shù)一樣,也是在函數(shù)名后面加上一對圓括號。不同的是,調(diào)用Generator函數(shù)后,該函數(shù)并不執(zhí)行,返回的也不是函數(shù)運行結(jié)果,而是一個指向內(nèi)部狀態(tài)的指針對象,遍歷器對象(Iterator Object)。

2、next方法

調(diào)用遍歷器對象的next方法,使得指針移向下一個狀態(tài)。也就是說,每次調(diào)用next方法,內(nèi)部指針就從函數(shù)頭部或上一次停下來的地方開始執(zhí)行,直到遇到下一個yield語句(或return語句)為止。換言之,Generator函數(shù)是分段執(zhí)行的,yield語句是暫停執(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)用了四次next方法。

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

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

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

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

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

3、yield*語句

用來在一個Generator函數(shù)里面執(zhí)行另一個Generator函數(shù),我們需要用yield*語句。

如果yield命令后面跟的是一個遍歷器對象,需要在yield命令后面加上星號,表明它返回的是一個遍歷器對象。這被稱為yield*語句。

"use strict";
function *anotherGenerator(i) {
    yield i + 1;
    yield i + 2;
    yield i + 3;
}
function *generator(i) {
    yield i;
    yield *anotherGenerator(i);
    yield i + 10;
}
let 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
console.log(gen.next().value);//undefined

運行結(jié)果就是使用一個遍歷器,遍歷了多個Generator函數(shù),有遞歸的效果。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/83639.html

相關(guān)文章

  • 【重溫基礎(chǔ)】13.迭代器和生成器

    摘要:迭代器和生成器將迭代的概念直接帶入核心語言,并提供一種機制來自定義循環(huán)的行為。本文主要會介紹中新增的迭代器和生成器。屬性本身是函數(shù),是當(dāng)前數(shù)據(jù)結(jié)構(gòu)默認(rèn)的迭代器生成函數(shù)。 本文是 重溫基礎(chǔ) 系列文章的第十三篇。今日感受:每次自我年終總結(jié),都會有各種情緒和收獲。 系列目錄: 【復(fù)習(xí)資料】ES6/ES7/ES8/ES9資料整理(個人整理) 【重溫基礎(chǔ)】1.語法和數(shù)據(jù)類型 【重溫基礎(chǔ)】2.流...

    ymyang 評論0 收藏0
  • 【HEXO】從零搭建HEXO博客 修改默認(rèn)主題/參數(shù)/favicon 替換個人主頁

    摘要:下面我以主題舉例,覆蓋默認(rèn)主題。其他元素使用相同的方法都可以修改。像這種超鏈接跳轉(zhuǎn)的修改,在文件中找到直接把屬性的值改變即可。 準(zhǔn)備:搭建環(huán)境 大致分為以下兩步: 安裝Node.js 安裝git 配置Node.js環(huán)境 下載Node.js安裝 Windows Installer 32-bithttps://nodejs.org/dist/v4.2.3/node-v4.2.3-x...

    My_Oh_My 評論0 收藏0
  • 【HEXO】從零搭建HEXO博客 修改默認(rèn)主題/參數(shù)/favicon 替換個人主頁

    摘要:下面我以主題舉例,覆蓋默認(rèn)主題。其他元素使用相同的方法都可以修改。像這種超鏈接跳轉(zhuǎn)的修改,在文件中找到直接把屬性的值改變即可。 準(zhǔn)備:搭建環(huán)境 大致分為以下兩步: 安裝Node.js 安裝git 配置Node.js環(huán)境 下載Node.js安裝 Windows Installer 32-bithttps://nodejs.org/dist/v4.2.3/node-v4.2.3-x...

    Near_Li 評論0 收藏0
  • 開始學(xué)習(xí)koa

    摘要:對已經(jīng)躍躍欲試很久,恰遇最近正式發(fā)布,今天嘗試著倒騰一番。所以自己對的學(xué)習(xí)算是從開始,由于文檔資源還不完全,準(zhǔn)備踩著前輩們的肩膀,慢慢入坑。常識入門級程序與大部分程序員同胞一樣樣的習(xí)慣,寫一發(fā)慰藉自己孤寂的心靈。 對koa已經(jīng)躍躍欲試很久,恰遇koa2最近正式發(fā)布,今天嘗試著倒騰一番。所以自己對koa的學(xué)習(xí)算是從2.x開始,由于文檔資源還不完全,準(zhǔn)備踩著前輩們的肩膀,慢慢入坑。 環(huán)境的...

    KunMinX 評論0 收藏0
  • eslint V4.1.1 規(guī)則簡介

    摘要:規(guī)則簡介花了一天整理的,可能部分翻譯的有錯誤,后面會再校對一次規(guī)則說明默認(rèn)情況下不會啟用任何規(guī)則。 eslint V4.1.1 規(guī)則簡介 花了一天整理的,可能部分翻譯的有錯誤,后面會再校對一次 規(guī)則說明:默認(rèn)情況下不會啟用任何規(guī)則。配置文件中的extends:eslint:recommended屬性可以啟用一些默認(rèn)的驗證規(guī)則,默認(rèn)的規(guī)則在下表會用R表示出來 使用--fix命令可以自動修...

    tuomao 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<