ES6第十八章

2021-10-06 15:21:27 字數 1361 閱讀 9640

概念

generator 函式是 es6 提供的一種非同步程式設計解決方案,語法行為與傳統函式完全不同,generator 函式有多種理解角度。語法上,首先可以把它理解成,generator 函式是乙個狀態機,封裝了多個內部狀態。

形式上,generator 函式是乙個普通函式,但是有兩個特徵。一是,function關鍵字與函式名之間有乙個星號;二是,函式體內部使用yield表示式,定義不同的內部狀態(yield在英語裡的意思就是「產出」)。

function

*helloworldgenerator()

var hw =

helloworldgenerator()

;

上面**定義了乙個 generator 函式helloworldgenerator,它內部有兩個yield表示式(hello和world),即該函式有三個狀態:hello,world 和 return 語句(結束執行)

下一步就是呼叫遍歷器物件的next方法,

hw.

next()

// hw.

next()

// hw.

next()

// hw.

next()

//

上一章說過,任意乙個物件的symbol.iterator方法,等於該物件的遍歷器生成函式,呼叫該函式會返回該物件的乙個遍歷器物件。

由於 generator 函式就是遍歷器生成函式,因此可以把 generator 賦值給物件的symbol.iterator屬性,從而使得該物件具有 iterator 介面。

var myiterable =

;myiterable[symbol.iterator]

=function*(

);[...myiterable]

// [1, 2, 3]

上面**中,generator 函式賦值給symbol.iterator屬性,從而使得myiterable物件具有了 iterator 介面,可以被…運算子遍歷了。

for…of迴圈可以自動遍歷 generator 函式執行時生成的iterator物件,且此時不再需要呼叫next方法。

function

*foo()

for(

let v of

foo())

// 1 2 3 4 5

上面**使用for…of迴圈,依次顯示 5 個yield表示式的值。這裡需要注意,一旦next方法的返回物件的done屬性為true,for…of迴圈就會中止,且不包含該返回物件,所以上面**的return語句返回的6,不包括在for…of迴圈之中。

第十八章 B樹

施工中施工中 基本操作主要包括 搜尋b樹,建立空b樹,插入關鍵字。18.3放出刪除關鍵字的 class program region 磁碟操作 為結點初始化對應的磁碟頁 private static node t allocate node t 磁碟寫操作 private static void d...

第十八章 定製特性

目錄 18.1 使用定製特性 18.2 定義自己的特性類 18.3 特性構造器和字段 屬性資料型別 18.4 檢測定製特性 18.5 兩個特性例項的相互匹配 18.6 檢測定製特性時不建立從attribute派生的物件 18.7 條件特性類 定製特性 利用定製特性,可宣告式地為自己的 構造新增註解來...

第十八章 18 2 3節練習

練習18.18 已知遊俠面的swap的典型定義 參見13.3節,第457頁 當mem1是乙個string時程式使用swap的哪個版本?如果mem1是int呢?說明在這兩種情況下名字查詢的過程。void swap t v1,t v2 解答 這裡典型定義應該指的是有乙個專為string交換而建立的swa...