js es6 生成器Generator函式

2021-10-24 09:16:09 字數 2298 閱讀 7642

基本語法

generator 函式有多種理解角度。首先可以把它理解成,generator 函式是乙個狀態機,封裝了多個內部狀態。

generator 函式是乙個普通函式,但是有幾個特徵。

function關鍵字與函式名之間有乙個星號;

函式體內部使用yield表示式,定義不同的內部狀態(yield在英語裡的意思就是「產出」);

執行 generator 函式會返回乙個遍歷器物件,可呼叫.next方法進行遍歷, 遍歷的結果是generator函式裡面通過yield或是return定義的值,按順序輸出

generator 函式的呼叫方法與普通函式一樣,也是在函式名後面加上一對圓括號。不同的是,呼叫 generator 函式後,該函式並不執行,返回的也不是函式執行結果,而是乙個指向內部狀態的指標物件(如下圖),也就是上一章介紹的遍歷器物件(iterator object)。

下一步,必須呼叫遍歷器物件的next方法,使得指標移向下乙個狀態。每次呼叫next方法,內部指標從函式頭部或上一次停下來的地方開始執行,直到遇到下乙個yield表示式(或return語句)為止。

function

*bar()

//呼叫了生成器函式,函式並麼有執行,返回了乙個迭代器物件

let iterator=

bar();

console.

log(iterator.

next()

);console.

log(iterator.

next()

);console.

log(iterator.

next()

.value)

;

yield表示式

1)遇到yield表示式,就暫停執行後面的操作,並將緊跟在yield後面的那個表示式的值,作為返回的物件的value屬性值。

2)下一次呼叫next方法時,再繼續往下執行,直到遇到下乙個yield表示式。

3)如果沒有再遇到新的yield表示式,就一直執行到函式結束,直到return語句為止,並將return語句後面的表示式的值,作為返回的物件的value屬性值。結束遍歷

4)如果該函式沒有return語句,則返回的物件的value屬性值為undefined。

function

*foo()

function

*bar()

let iterator=

bar();

for(

let value of iterator)

//function

foo(

)function

*bar()

let iterator=

bar();

console.

log(iterator.

next()

);console.

log(iterator.

next()

);return

yield

//都可以返回語句之後的那個值,一樣的。但是return之後就無法取值,不一樣的地方

next傳引數
// next方法可以帶乙個引數,該引數可以被當作上乙個yield語句的返回值     

function

*foo()

let iterator=

foo();

console.

log(iterator.

next(2

)); console.

log(iterator.

next(3

));

return 方法
//返回的引數 並且遍歷結束遍歷

//沒有給引數返回就為未定義

function

*foo()

let iterator=

foo();

console.

log(iterator.

next()

);console.

log(iterator.

return

("結束"))

; console.

log(iterator.

next()

);

throw
letg=

function*(

)catch

(e)finally

}let iterator=g(

);iterator.

next()

;

Python學習筆記 生成器(Generator)

python學習筆記 生成器 generator 擁有迭代序列的一致方式,比如列表裡的物件或檔案裡的行,是python的一項重要特性。這是通過迭代器協議的方式來完成的,一種生成可迭代物件的通用方式。例如,迭代乙個字典會生成字典鍵構成的集合。當我們書寫for key in mydict語句時,pyth...

6 生成器模式 builder

將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。builder 生成器介面,定義建立乙個product物件所需的各個部件的操作。concretebuilder 具體的生成器實現,實現各個部件的建立,並負責組裝product物件的各個部件,同時還提供乙個讓使用者獲取組裝完成後...

JS之ES6生成器

generator 生成器 是 es6 標準引入的新的資料型別。乙個 generator 看上去像乙個函式,但可以返回多次。generator 函式和普通的函式區別有兩個,1 function 和函式名之間有乙個 號,2 函式體內部使用了 yield 表示式 呼叫生成器函式和呼叫 普通函式不同,呼叫...