在es6中,generator用於封裝非同步任務,是一個非同步任務的容器,可以讓函數按照指定的時間執行或暫停;定義該函數時在function關鍵字和函數名之間有一個星號(*),語法為「function *name(){..yield..}」。
本教學操作環境:windows10系統、ECMAScript 6.0版、Dell G3電腦。
Generator主要是非同步編程,用來封裝非同步任務,是一個非同步任務的容器,可以讓函數按照我們指定的時候執行或暫停。
定義一個Generator函數和定義一個普通函數的差異在於:
function關鍵字和函數名稱之間有一個 *(星號)。
函數內部使用yield來定義每個函數內部的狀態。
如果函數內部有return語句,那麼他就是函數內部的最後一個狀態。
使用語法:
function *name(){ ... yield; //需要暂停的时候加yield ... yield; ... } const p = name(); p.next() //调用函数,执行到第一个yield处停止 p.next() //从上一个yeild开始执行,到下一个yield处为止
來看一個簡單的例子:
// 定义 function* sayHello() { yield 'hello'; yield 'world'; return 'ending'; } // 调用 // 注意,hw获取到的值是一个遍历器对象 let g = sayHello();
上面的例子,定義了一個名為sayHello的Generator函數,它內部有兩個yield表達式和一個return表達式。所以,函數內部有三個狀態:hello,world 和 return語句(結束執行)。最後,呼叫這個函數,得到一個遍歷器物件並賦值給變數g。
Generator函數的呼叫方法與普通函數完全一樣,函數名稱()。不同的是:
函數呼叫後,內部程式碼(從第一行開始)都不會立即執行。
函數呼叫後會有一個回傳值,這個值是指向內部狀態的指針對象,實質就是一個包含函數內部狀態的遍歷器物件。
【相關推薦:javascript影片教學、web前端】
#以上是es6中generator的用法是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!