ES6之Generator函數

? ? ? Generator函數,ES6新增的函數,通過這個函數可以控制函數的執行步驟,也有說這是一個狀態機,內部封裝多個狀態。執行Generator函數,不會立即這個函數方法,會返回一個遍歷對象,可以依次遍歷到函數中的每個狀態或者說是每個特意要執行的步驟,至于這個返回的對象呢是指向函數內部表達式運行的開始,通過每次調用next依次執行到里面每步特別標注的步驟--yield注明或者return,而每次調用next方法返回的對象包含value(內部狀態的值,yield后面的那個值)done(表示是否遍歷結束或者說是里面的特別的步驟是否運行結束)。

? ? ? Generator函數具體的表現形式:function 和函數名之間有個*,函數體內部的表達式包含 yield去定義一個特別表明的步驟(狀態)。對于*的位置沒有特別要求在function和函數名之間都行;yield放入別的函數表達式中必須加括號,但是作為參數聲明或者變量賦值就不需要,next運行時碰到yield就會停止后續步驟執行,并返回yield后面那個表達式作為value,再次調用next接著執行直到遇到yield,如果遇不到yield的話 return也行,并將return后面的表達式作為value值,如果啥都遇不上就返回value是個undefined。generator函數的簡寫形式就是在函數名前加個*號,* fun

? ? ?Generator函數的方法:next,依次運行到每個特殊注明的步驟,可攜帶一個參數表示上一個yield表達式返回的值(因此第一次next不用跟參數值從第二個next開始),通過這些個參數可以不同步驟階段的不同的值進行不同的運算;for...of..遍歷generator函數中的yield表達式。Generator函數返回的對象都包含一個throw方法拋出然后在Generator函數中catch的錯誤,如果函數內部沒有catch而外部有就外部catch,如果都沒有函數就報錯,并且自帶的throw方法之后自動執行一次next,但是如果在外部捕獲的錯誤,那么generator函數就會停止執行。Generator函數的return方法(某個參數)結束函數執行并返回某個值或者undefined,如果存在try...finally..那么等finally 執行完再執行return。其中next、throw、return都可以使generator函數接著執行,不同在于next是正常執行,throw是拋出錯誤往下執行,return是終止程序。

? ? ? ?在一個generator函數中調用另一個generetor函數沒有作用,但是被調用的generator函數前面加上yield *那就可以正常執行了,但是使用yield的話返回的Generator函數返回的對象。 yield * 后面跟一個數組對象那么它將開始對數組對象的遍歷,如果是yield 后面跟數組對象呢那就是返回數組對象。?

? ? Generator函數不能用作構造函數,因為它返回的總是一個遍歷器對象,也不能跟new命令一起使用會報錯。但是可以根據call改變函數內部的this指向生成對象實例或者直接使用Prototype。

? ? ? 狀態機是能夠根據控制信號按照預先設置狀態進行位移,是協調相關信號動作、完成特定操作的控制中心。而generator函數的運行狀態比較適合實現狀態機的結構。Generator函數用途:異步操作的同步化表達(根據next方法),控制流管理,部署Iterator接口,作為數據結構。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 在此處先列下本篇文章的主要內容 簡介 next方法的參數 for...of循環 Generator.prototy...
    醉生夢死閱讀 1,463評論 3 8
  • 簡介 基本概念 Generator函數是ES6提供的一種異步編程解決方案,語法行為與傳統函數完全不同。本章詳細介紹...
    呼呼哥閱讀 1,088評論 0 4
  • 本文作者就是我,簡書的microkof。如果您覺得本文對您的工作有意義,產生了不可估量的價值,那么請您不吝打賞我,...
    microkof閱讀 23,752評論 16 78
  • 異步編程對JavaScript語言太重要。Javascript語言的執行環境是“單線程”的,如果沒有異步編程,根本...
    呼呼哥閱讀 7,326評論 5 22
  • 六月份風總是帶著熱浪,讓人浮躁,加上令人傷感的畢業季,總是有一種別樣樣的滋味!就在這樣天天吐槽的時間,在待了...
    鑫耶閱讀 227評論 0 1