ES6入门之Generator函数
Generator
Generator函數(shù)是ES6提供的一種異步編程解決方案,Generator函數(shù)是一個(gè)狀態(tài)機(jī),封裝了多個(gè)內(nèi)部狀態(tài)。
執(zhí)行Generator函數(shù)會(huì)返回一個(gè)遍歷器對(duì)象,也就是說,Generator函數(shù)除了狀態(tài)機(jī),還是一個(gè)遍歷器對(duì)象生成函數(shù)。返回的遍歷器對(duì)象,可以依次遍歷Generator函數(shù)內(nèi)部的每一個(gè)狀態(tài)。
Generator的兩個(gè)特征:
- function關(guān)鍵字與函數(shù)名之間有一個(gè)星號(hào)
- 函數(shù)體內(nèi)部使用yield(產(chǎn)出)語句,定義不同的內(nèi)部狀態(tài)
yield語句
由于Generator函數(shù)返回的遍歷器對(duì)象,只有調(diào)用next方法才會(huì)遍歷下一個(gè)內(nèi)部狀態(tài),所以其實(shí)提供了一種可以暫停執(zhí)行的函數(shù)。yield語句就是暫停標(biāo)志。
yield和return
相似:都能返回緊跟在語句后面的那個(gè)表達(dá)式的值
區(qū)別:
- 每次遇到y(tǒng)ield,函數(shù)暫停執(zhí)行,下一次再從該位置繼續(xù)向后執(zhí)行,而return語句不具備位置記憶的功能
- 一個(gè)函數(shù)里面,只能執(zhí)行一次(或者說一個(gè))return語句,但是可以執(zhí)行多次(或者說多個(gè))yield語句。
在使用for...of時(shí)自動(dòng)遍歷Generator函數(shù),不需要調(diào)用next方法
yield*語句
如果在Generater函數(shù)內(nèi)部,調(diào)用另一個(gè)Generator函數(shù),默認(rèn)情況下是沒有效果的。這個(gè)就需要用到y(tǒng)ield*語句,用來在一個(gè)Generator函數(shù)里面執(zhí)行另一個(gè)Generator函數(shù)。
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"?
轉(zhuǎn)載于:https://www.cnblogs.com/sker/p/5520697.html
總結(jié)
以上是生活随笔為你收集整理的ES6入门之Generator函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (6)css盒子模型(基础下)
- 下一篇: 使用uWSGI部署django项目