日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ES6入门之Generator函数

發布時間:2023/11/30 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ES6入门之Generator函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Generator

Generator函數是ES6提供的一種異步編程解決方案,Generator函數是一個狀態機,封裝了多個內部狀態。

執行Generator函數會返回一個遍歷器對象,也就是說,Generator函數除了狀態機,還是一個遍歷器對象生成函數。返回的遍歷器對象,可以依次遍歷Generator函數內部的每一個狀態。

Generator的兩個特征:

  • function關鍵字與函數名之間有一個星號
  • 函數體內部使用yield(產出)語句,定義不同的內部狀態
function* helloWorldGenerator() {yield 'hello';yield 'world';return 'ending'; }var hw = helloWorldGenerator(); hw.next() // { value: 'hello', done: false } hw.next() // { value: 'world', done: false } hw.next() // { value: 'ending', done: true } hw.next() // { value: undefined, done: true }

yield語句

由于Generator函數返回的遍歷器對象,只有調用next方法才會遍歷下一個內部狀態,所以其實提供了一種可以暫停執行的函數。yield語句就是暫停標志。

yield和return

相似:都能返回緊跟在語句后面的那個表達式的值

區別:

  • 每次遇到yield,函數暫停執行,下一次再從該位置繼續向后執行,而return語句不具備位置記憶的功能
  • 一個函數里面,只能執行一次(或者說一個)return語句,但是可以執行多次(或者說多個)yield語句。

在使用for...of時自動遍歷Generator函數,不需要調用next方法

yield*語句

如果在Generater函數內部,調用另一個Generator函數,默認情況下是沒有效果的。這個就需要用到yield*語句,用來在一個Generator函數里面執行另一個Generator函數。

function* bar() {yield 'x';yield* foo();yield 'y'; }// 等同于 function* bar() {yield 'x';yield 'a';yield 'b';yield 'y'; }// 等同于 function* bar() {yield 'x';for (let v of foo()) {yield v;}yield 'y'; }for (let v of bar()){console.log(v); } // "x" // "a" // "b" // "y"

?

轉載于:https://www.cnblogs.com/sker/p/5520697.html

總結

以上是生活随笔為你收集整理的ES6入门之Generator函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。