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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

生成器——迭代器工作的工厂

發(fā)布時(shí)間:2024/2/28 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 生成器——迭代器工作的工厂 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1.生成器的概念

1)定義:生成器是一個(gè)通過構(gòu)造函數(shù)Generator創(chuàng)建的對象,生成器既是一個(gè)迭代器,同時(shí)又是一個(gè)迭代對象。

2)生成器的創(chuàng)建:我們并不能new一個(gè)生成器,而是由生成器函數(shù)(Generator Function)來創(chuàng)建生成器

3)生成器的書寫:function* method() {},該函數(shù)返回一個(gè)生成器,即調(diào)用生成器函數(shù)后,得到一個(gè)生成器。

【例1】

function* test() {} const generator = test();

【結(jié)果】

?

2.生成器函數(shù)的內(nèi)部執(zhí)行

生成器函數(shù)內(nèi)部是為了給生成器的每次迭代提供數(shù)據(jù)的,每次調(diào)用生成器的next方法,將導(dǎo)致生成器函數(shù)運(yùn)行到下一個(gè)yield關(guān)鍵字位置。yield只能在生成器函數(shù)內(nèi)部使用,來表示”產(chǎn)生“一個(gè)迭代數(shù)據(jù).

【例2】

function* test() {console.log("第一次運(yùn)行");yield 1;console.log("第二次運(yùn)行");yield 2;console.log("第三次運(yùn)行"); } const generator = test();

【結(jié)果】可以看到在第一次調(diào)用next方法后,生成器函數(shù)運(yùn)行到y(tǒng)ield 1;停止了,再次調(diào)用又運(yùn)行到下一個(gè)yield位置。

【例3】

const arr1 = [1, 4, 3, 6, 5]; const arr2 = [3, 5, 2, 7, 5, 4]; function* creatInerator(arr) {//生成器調(diào)用next函數(shù),運(yùn)行生成器構(gòu)造函數(shù),進(jìn)入forof循環(huán)for (const iterator of arr) {//調(diào)用一次next,代碼運(yùn)行到y(tǒng)ield停止yield iterator;} } const iter1 = creatInerator(arr1); const iter2 = creatInerator(arr2);

【結(jié)果】

【注】

1)生成器函數(shù)可以有返回值,返回值出現(xiàn)在第一次done為true時(shí)的value屬性中

【例4】

function* test() {console.log("第一次運(yùn)行");yield 1;console.log("第二次運(yùn)行");yield 2;console.log("第三次運(yùn)行");return 10; } const generator = test();

【結(jié)果】

2)調(diào)用生成器的next方法時(shí),可以傳遞參數(shù),傳遞的參數(shù)會(huì)交給yield表達(dá)式的返回值

3)第一次調(diào)用next方法時(shí),傳參沒有任何意義

【例5】

function* test() {console.log("start");let info = yield 1;console.log(info);info = yield 2 + info;console.log(info); } const generator = test();

【結(jié)果】

?

4)在生成器函數(shù)內(nèi)部,可以調(diào)用其他生成器函數(shù),但是要注意加上*號

【例6】

function* t1() {yield 'a';yield 'b'; } function* test() {//相當(dāng)于把生成器t1中的函數(shù)體復(fù)制到test中yield* t1();yield 1;yield 2;yield 3; } const generator = test();

【結(jié)果】

?

3.生成器的其他API

1)return方法:調(diào)用該方法,可以提前結(jié)束生成器函數(shù),從而提前讓整個(gè)迭代過程結(jié)束

2)throw方法:調(diào)用該方法,可以在生成器中產(chǎn)生一個(gè)錯(cuò)誤

總結(jié)

以上是生活随笔為你收集整理的生成器——迭代器工作的工厂的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。