概念
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...