Generator函數

1.爲什麼要用它?

 要用一種工具,它必須有它的價值,首先說一說它的特點。函數的類型目前有四種:普通函數、箭頭函數、異步函數、還有Generator函數。Generator的作用是,改善回調地獄,將異步嵌套寫成同步寫法。

(1)函數定義上的區別:

 Generator函數是一個普通的函數,但是他也有自己的特點:1)在function關鍵字和函數名之間有一個*(星號)號,這個星號可以跟在function右上角,也可以跟在函數名左上角,都可以;2)內部使用yield關鍵字,用來chn內部不同的狀態產出。

(2)返回值的區別:

   Generator是一個普通函數,調用也是在後面加圓括號,但是與普通函數比,區別在於,普通函數會立即執行併產出一個結果,但是Generator不是,它一定會返回一個對象,一個指針對象,也就是iterator Object.要想指針往下移動,需要調用next()方法,函數中的yield相當於暫停,遇到下一個yield或者return就會暫停,使用next可恢復執行,調用next方法,當流程尚未結束時,會返回一個對象,這個對象的value值,就時yield表達式的值,如果結束了,就會返回undefined

(3)yield表達式

   yiled表達式最後會產生一個對象,對象包含兩個屬性,value和done,value的值就是yield表達式返回的值,done表示是否執行結束

(4)yield語句會返回一個值,且只有用next方法,指針纔會向下移動,相當於惰性求值,yield關鍵字和return的區別在於:

     1)求值時機:return 會在函數調用後立即執行,而yield會在使用next方法後才執行
     2)返回次數和記憶功能:return 不具備記憶功能,而yield表達式會在使用next後從上次暫停的位置開始向下接着執行,並且可以多次返回狀態值

(5) generator函數也可以不用yield表達式,這樣函數就變成了一個簡單的暫緩執行函數,但是,yield表達式卻只能用在generator當中,用在其他地方會報錯,另外,yield表達式放在表達式中時,必須放在括號內,否則會報語法錯誤。
(6) next方法的參數:next方法的參數是上一次yield產生的結果,因此,可以根據next的參數去改變函數的狀態,在第一次使用next方法時,傳入的參數會被忽略,默認無效,第一次使用next方法實際上是啓動遍歷器,可以不用帶參數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章