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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/395935.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/395935.shtml
英文地址,請注明出處:http://en.pswp.cn/news/395935.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

reddit_Reddit如何設計和編碼其詳盡的愚人節體驗,/ r / place

redditHere are three links worth your time:這是三個值得您花費時間的鏈接: How Reddit designed and coded its elaborate April Fool’s experience, /r/place (17 minute read) Reddit如何設計和編碼其詳盡的愚人節經驗/ r / place( 閱讀17分鐘 ) These hacka…

CSS中屬性的值和單位

CSS中值的單位 1.顏色值 被各種瀏覽器支持,并且作為 CSS 規范推薦的顏色名稱只有 16 種,如下表所示。 百分比表示 color: rgb(100%, 100%, 100%); 這個聲明將紅、藍、綠 3 種原色都設置為最大值,結果組合顯示為白色。相反,可以設置…

mysql能否在手機端運行_在手機上安裝linux并部署mysql,jupyter用于數據探索

因為現在有一臺舊手機放在學校,之前使用的軟路由內存只有128M,不方便存一些小的數據.手機的好處是可以一直開著,因此在手機上安裝linux來替代樹莓派做服務器是可行的(由于不需要對外,所以也不用購買服務器).安裝linux首先安裝busybox1.對于busybox,進入左上角settings,設置inst…

《走進SAP(第2版)》——2.8 SAP的目標是什么

本節書摘來自異步社區《走進SAP(第2版)》一書中的第2章,第2.8節,作者: 【德】Nancy Muir , Ian Kimbell , 等 更多章節內容可以訪問云棲社區“異步社區”公眾號查看。 2.8 SAP的目標是什么 走進SAP(第2版)…

尼康d850相機參數測試軟件,尼康 - D850 - 產品介紹

類型數碼單鏡反光相機鏡頭卡口尼康F卡口(帶有AF耦合和AF接點)有效視角尼康FX格式影像傳感器格式FX格式影像傳感器類型CMOS傳感器有效像素數約4,575萬影像傳感器約35.9mm x 23.9mm總像素數約4,689萬灰塵減少功能清潔影像傳感器圖像尺寸(像素)-FX (36x24) 影像區域(L) 8256 x 550…

我如何構建Kubernetes集群,以便我的同事可以更快地部署應用程序

by cheungpat通過cheungpat 我如何構建Kubernetes集群,以便我的同事可以更快地部署應用程序 (How I built a Kubernetes cluster so my coworkers could deploy apps faster) How do you encourage your development team to build more projects without being bo…

使用uWSGI部署django項目

先說說什么是uWSGI吧,他是實現了WSGI協議、uwsgi、http等協議的一個web服務器,那什么是WSGI呢? WSGI是一種Web服務器網關接口。它是一個Web服務器(如nginx)與應用服務器(如uWSGI服務器)通信的一…

8 包含min函數的棧

0 引言 題目:定義棧的數據結構,請在該類型中實現一個能夠得到棧的最小元素的min函數。在該棧中,調用min、push及pop的時間復雜度都是O(1). 1 抽象問題具體化 2 具體問題抽象分析 需要解決的兩個主要問題如下。 &#x…

《Adobe Illustrator大師班:經典作品與完美技巧賞析》—Svetlana Makarova

本節書摘來自異步社區《Adobe Illustrator大師班:經典作品與完美技巧賞析》一書中的Svetlana Makarova,作者【英】Sharon Milne,更多章節內容可以訪問云棲社區“異步社區”公眾號查看。 Svetlana MakarovaAdobe Illustrator大師班:經典作品與…

navicat無法連接遠程mysql數據庫_navicat無法遠程連接mysql的解決方法

近日在Ubuntu上安裝了一個 MySQL 5.0,因為使用 phpMyAdmin 還必須安裝 PHP,所以打算直接使用遠程管理工具Navicat for MySQL 來連接。在 Ubuntu 中通過 mysql 命令行創建好一個數據表并分配了權限:代碼如下:GRANT ALL ON testdb.* TO usera I…

有關軟件測試的證書,軟件測試證書有用嗎

要想知道證書有什么用,我們就要詳細了解軟件評測師考試,以及拿到證書的價值。那么下面和小編來看看這篇軟件測試證書有用嗎,一定會有收獲。一、證書考試軟件評測師考試是全國計算機技術與軟件技術資格考試的一個中級考試。考試不規定學歷和資…

計算機科學導論第五版_五月份將開始提供438項免費在線編程和計算機科學課程

計算機科學導論第五版Five years ago, universities like MIT and Stanford first opened up free online courses to the public. Today, more than 700 schools around the world have created thousands of free online courses.五年前,麻省理工學院和斯坦福大學…

python D29 socketserver以及FTB

一、socketserver 基于tcp協議下的socket只能和一個客戶端通信,如果用socketserver可以實現和多個客戶端通信。 他是在socket的基礎上進行封裝,也就是說底層還是調用的socket,在py2.7里面叫做SocketServer也就是大寫了兩個S,在py3…

計算機節電模式不能打開,電腦進入節電模式打不開怎么辦

大家好,我是時間財富網智能客服時間君,上述問題將由我為大家進行解答。電腦進入節電模式打不開的原因及解決方法如下:1、顯示器和顯卡接觸不良解決辦法:檢查顯示器和顯卡的連接是否正確,接觸是否良好;2、顯…

sphinx mysql存儲引擎_基于Sphinx+MySQL的千萬級數據全文檢索(搜索引擎)架構設計...

Sphinx,單一索引最大可包含1億條記錄,在1千萬條記錄情況下的查詢速度為0.x秒(毫秒級)。Sphinx創建索引的速度為:創建100萬條記錄的索引只需3~4分鐘,創建1000萬條記錄的索引可以在50分鐘內完成,而只包含最新…

《第一桶金怎么賺——淘寶開店創業致富一冊通》一一1.1 創業者需具備的素質...

本節書摘來自異步社區出版社《第一桶金怎么賺——淘寶開店創業致富一冊通》一書中的第1章,第1.1節,作者:葛存山,更多章節內容可以訪問云棲社區“異步社區”公眾號查看。 1.1 創業者需具備的素質 第一桶金怎么賺——淘寶開店創業致…

4-1 線程安全性-原子性-atomic-1

轉載于:https://www.cnblogs.com/ZHONGZHENHUA/p/10026627.html

構建了我的第一個React Native應用程序之后,我現在確信這是未來。

by Taylor Milliman泰勒米利曼(Taylor Milliman) 構建了我的第一個React Native應用程序之后,我現在確信這是未來。 (After building my first React Native app, I’m now convinced it’s the future.) After a few weeks of playing around with React Native, …

delphi7 提示注冊過期問題

很同情你得經過~ 因為我以前也是經常遇見這個問題~就和你說得一樣~ 后來~ 我發現 下載使用的Delphi 7只能使用一個注冊碼,那就是:6AMD-PKG68E-DB8PP7-9SFE 3QH-9QW所以,你先把C:\Documents and Settings\Administrator\.borland文件夾下的兩個文件刪除然后用 Progra…

計算機開機引導的結果是,電腦開機顯示引導媒體是怎么回事

電腦開機顯示引導媒體是怎么回事分類:數據恢復常見問題|最后更新:2020年4月9日開機顯示重新啟動并選擇適當的引導設備或插入1.如果主機上接有可移動存儲介質(如光盤、移動硬盤、U盤等),將其拔掉,然后重啟。2.如果仍然這樣,進入主板設置中,依次檢測以下幾…