ES6學習 Generator函式

2021-07-25 05:06:20 字數 1806 閱讀 2850

generator是es6提供的一種非同步程式設計的解決方案。

形式上有兩個特徵。一是,function關鍵字和函式名之間有個星號;二是,函式內部使用yield語句,定義不同的內部狀態。

function* hellogenerator

()var hw = hellogenerator();

必須呼叫物件的next方法,使得指標移向下乙個狀態。generator函式是分段執行的。yield語句是暫停執行的標記,而next方法可以恢復執行。

hw.next()

// hw.next()

// hw.next()

// hw.next()

//

遍歷器物件的next方法的執行邏輯如下:

(1)遇到yield語句,就暫停執行後面的操作,並將緊更著yield後面表示式的值,作為返回的物件value的屬性值。

(2)下次呼叫next方法時,再繼續往下執行,直到遇到下乙個yield語句的。

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

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

generator函式可以不用yield語句,這時就變成乙個單純的暫緩執行函式。

function* f

()var generator = f();

settimeout(function

(),2000);

上面**如果f是普通函式,再為變數generator賦值的時候就已經執行了。但是,函式f是乙個generator函式,就變成只有呼叫next方法時,函式f才會執行。

另外注意,yield語句不能再普通函式裡面,否則會報錯。

return方法可以返回指定的值,並終結了generator函式。

function* gen()

var g = gen();

g.next(); //

g.return('foo'); //

g.next(); //

如果generator函式內部有try ... finally**塊,那麼return方法會推遲到finally**塊執行完成再執行。

function* numbers() finally

yield6;}

var g = numbers()

g.next(); //

g.next(); //

g.return(7);//

g.next();//

g.next();//

ES6學習系列 Generator 函式

generator 總覽 上例項 function testgen let test testgen test.next test.next test.next test.next 遍歷到這裡就結束了 test.next 1 generator 函式返回的遍歷器物件和 iterator 介面的關係 ...

ES6 學習系列十六(Generator)

generator可以理解為非同步程式設計的一種解決方案。1 generator的基本定義就是在function後面加乙個 符號 通過next一步步執行yield的 let k tell console.log k.next console.log k.next console.log k.next...

聊聊ES6中的generator

generator generator 生成器 是es6標準引入的新的資料型別。乙個generator看上去像乙個函式,但函式執行中間可以停止。es6定義generator標準的哥們借鑑了python的generator的概念和語法。話說回來,generator有什麼用呢,讓我們通過幾個函式來看一看...