成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術(shù)文章
文章詳情頁

Javascript生成器(Generator)的介紹與使用

瀏覽:2日期:2023-06-10 09:59:24
什么是生成器?

生成器是在函數(shù)內(nèi)部運行的一些代碼

返回值后,它會自行暫停,并且—— 調(diào)用程序可以要求取消暫停并返回另一個值

這種“返回”不是傳統(tǒng)的從函數(shù) return。所以它被賦予了一個特殊的名稱——yield。

生成器語法因語言而異。Javascript 的生成器語法類似于 PHP,但是區(qū)別也很大,如果你希望它們的作用相同,那么最終你會感到非常困惑。

在 javascript 中,如果想要使用生成器,則需要:

定義特殊的生成器函數(shù) 調(diào)用該函數(shù)創(chuàng)建一個生成器對象 在循環(huán)中使用該生成器對象,或直接調(diào)用其 next 方法

我們以下面這個簡單的程序做為起點,并執(zhí)行以下每個步驟:

// File: sample-program.jsfunction *createGenerator() { for(let i=0;i<20;i++) { yield i }}const generator = createGenerator()console.log(generator.next())console.log(generator.next())

如果運行這段代碼,則會得到以下輸出:

$ node sample-program.js

{ value: 0, done: false }{ value: 1, done: false }

下面我來解釋該程序是如何工作的。

生成器函數(shù)

首先,代碼中存在生成器函數(shù)的定義:

function* createGenerator() { for(let i=0;i<20;i++) { yield i }}

function 后面的 * 告訴 javascript 這是一個生成器函數(shù)。以下寫法都是生成器函數(shù)的有效定義。

function*createGeneratorfunction* createGeneratorfunction *createGenerator

* 并不是函數(shù)名的一部分。而是 function* 符號定義了生成器。

調(diào)用生成器函數(shù)

定義了生成器函數(shù)后,我們將其命名為其他名稱的函數(shù)。

// 注意:當(dāng)調(diào)用時,沒有 *。 * 不是函數(shù)名稱的一部分// `function *` 是用于定義生成器函數(shù)的符號const generator = createGenerator()

但是要記住:createGenerator 函數(shù)沒有返回值。這是因為生成器函數(shù)沒有傳統(tǒng)的返回值。相反,當(dāng)你直接調(diào)用生成器函數(shù)時,它總是返回實例化的 Generator 對象。

這個生成器對象具有一個 next 方法。調(diào)用 next 將在生成器函數(shù)內(nèi)部運行代碼。

function* createGenerator() { for(let i=0;i<20;i++) { yield i }}

這很重要,足以再次調(diào)用它。直接調(diào)用生成器函數(shù)不會在生成器函數(shù)中運行任何代碼。而是創(chuàng)建一個生成器對象。它在生成器對象上調(diào)用 next,從而調(diào)用生成器函數(shù)中的代碼。

首次在生成器對象上調(diào)用 next 時,內(nèi)部代碼將會一直運行,直到出現(xiàn) yield 語句。一旦執(zhí)行到 yield,javascript 將會暫停該代碼的執(zhí)行,而 next 將返回(即給你,或yield)一個對象,該對象包含 yield 行中的值。

當(dāng)你第二次(或第三次、第四次甚至更多次)再調(diào)用 next 時,代碼將會取消暫停并繼續(xù)運行(在上次調(diào)用時中斷的地方)。變量(例如本例中的 i )將會保持它的值。當(dāng)代碼到達另一個 yield 語句時,該函數(shù)會再次暫停,并返回一個包含 yield 值的對象。

這就是為什么我們要調(diào)用兩次 next

console.log(generator.next())console.log(generator.next())

會得到以下輸出:

{ value: 0, done: false }{ value: 1, done: false }

生成器函數(shù)中的代碼執(zhí)行完畢后,將來對 next 的任何調(diào)用都會返回一個對象,該對象的值為 undefined 且done 設(shè)置為 true。

{ value: undefined, done: true }生成器和循環(huán)

雖然可以在生成器對象上手動調(diào)用 next,但我們主要是要在循環(huán)中使用。看一下這個稍作修改的程序。

// File: sample-program.js@highlightsyntax@jscriptfunction *createGenerator() { for(let i=0;i<5;i++) { yield i }}const generator = createGenerator()for(const value of generator) { console.log(value)}

當(dāng)在 for...of 循環(huán)中使用生成器對象時,每次循環(huán)都會在生成器對象上調(diào)用 next,并用產(chǎn)生的值填充變量(上面的 value)。運行該程序?qū)敵鲆韵聝?nèi)容:

$ node sample-program.js01234

在下一篇文章中,我們將更深入地探討 for ... of 循環(huán),并探索怎樣為 javascript 提供一種內(nèi)置方法來循環(huán) javascript 中的任何對象。

總結(jié)

到此這篇關(guān)于Javascript生成器(Generator)的文章就介紹到這了,更多相關(guān)Javascript生成器(Generator)內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: JavaScript
相關(guān)文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
精品影院一区二区久久久| 国产欧美日韩亚州综合| 欧美在线综合视频| 久久久电影一区二区三区| 五月天丁香久久| 精品动漫3d一区二区三区免费版| 欧美欧美欧美欧美首页| 亚洲成人在线免费| 色综合色综合色综合| 欧美日韩你懂得| 亚洲国产精品视频| 91日韩精品一区| 91 com成人网| 天天色 色综合| 国内不卡一区二区三区| 日韩欧美一二三| 久久国产综合精品| 老鸭窝亚洲一区二区三区| 国产精品免费免费| av电影在线观看完整版一区二区| 欧美性大战久久久| 亚洲成人激情社区| 亚洲精品1区2区| 国产无人区一区二区三区| 国产精品亚洲午夜一区二区三区| 色老汉一区二区三区| 亚洲欧美日韩国产另类专区| 欧美在线亚洲综合一区| 精品裸体舞一区二区三区| 黄网站免费久久| 色婷婷综合视频在线观看| 一二三区精品视频| 亚洲精品国产精品国自产观看| 国产午夜精品一区二区三区视频 | 久久激情五月激情| 久久精品观看| 一区二区三区在线视频播放 | 精品国产123| 国产精品亚洲视频| 4hu四虎永久在线影院成人| 日韩成人一区二区| 亚洲少妇诱惑| 亚洲欧美日韩国产手机在线| 国产精品啊啊啊| 欧美极品少妇xxxxⅹ高跟鞋| 99这里只有久久精品视频| 欧美电影免费观看高清完整版在| 激情六月婷婷综合| 欧美日韩一区二区三区免费看| 国产精品高潮呻吟久久| 欧美 日韩 国产 一区| 欧美一级专区免费大片| 国产毛片精品一区| 制服丝袜国产精品| 国产成人精品免费网站| 欧美一区二区三区啪啪| 国产麻豆视频精品| 91精品欧美福利在线观看| 韩国女主播成人在线| 欧美日韩黄视频| 国产中文字幕精品| 3d动漫精品啪啪1区2区免费| 国产另类ts人妖一区二区| 欧美精品在线观看播放| 国产在线观看一区二区| 欧美一级淫片007| 极品销魂美女一区二区三区| 精品1区2区3区| 激情丁香综合五月| 欧美日韩一级二级三级| 极品少妇xxxx偷拍精品少妇| 欧美精品在线观看一区二区| 国产精品白丝av| 3751色影院一区二区三区| 国产mv日韩mv欧美| 精品国产免费人成在线观看| 欧美精品免费观看二区| 国产精品卡一卡二卡三| 亚洲小说区图片区| 亚洲国产精品精华液网站| 亚洲综合社区| 亚洲国产aⅴ成人精品无吗| 久久在线视频| 久久se这里有精品| 在线国产电影不卡| 国产高清亚洲一区| 26uuu国产电影一区二区| 欧美日韩国内| 亚洲乱码日产精品bd| 久久狠狠婷婷| 精久久久久久久久久久| 欧美日韩亚洲综合在线 | 日本高清免费不卡视频| 久久爱www久久做| 精品国产不卡一区二区三区| 亚洲视频免费| 天堂va蜜桃一区二区三区漫画版| 欧美日韩国产成人在线免费| 成人理论电影网| 自拍偷拍亚洲综合| 久久久精彩视频| 国产精品白丝av| 中文字幕精品在线不卡| 亚洲综合丁香| 国产在线精品免费| 日韩午夜激情视频| 91麻豆国产香蕉久久精品| 亚洲美女一区二区三区| 欧洲精品视频在线观看| 国产黑丝在线一区二区三区| 中文av一区二区| 亚洲一区二区三区高清不卡| 精品一二三四在线| 欧美国产综合一区二区| 亚洲欧美网站| 国产成人自拍网| 亚洲免费观看高清完整| 欧美日韩精品一区二区三区蜜桃| 欧美chengren| 欧美va天堂| 亚洲一区二区三区四区五区中文| 欧美日韩在线不卡| 午夜精品亚洲一区二区三区嫩草| 亚洲日本韩国一区| 精品视频全国免费看| 欧美日韩ab| 亚洲韩国一区二区三区| 欧美一级在线视频| 99在线精品免费视频九九视| 国产真实乱对白精彩久久| 1024国产精品| 欧美主播一区二区三区| 欧美另类专区| 日本不卡视频在线观看| 久久精品人人做人人综合 | 日韩成人免费电影| www日韩大片| 久久久久久久波多野高潮日日| 本田岬高潮一区二区三区| 亚洲图片欧美视频| 久久久久久久久久久久久久久99| 午夜在线视频观看日韩17c| 成a人片亚洲日本久久| 午夜亚洲福利老司机| 久久影院午夜论| 免费久久久一本精品久久区| 99在线精品一区二区三区| 婷婷国产v国产偷v亚洲高清| 国产亚洲精品超碰| 欧美亚洲国产怡红院影院| 影音先锋久久| 国产乱人伦偷精品视频不卡| 一区二区三区四区不卡在线 | 日韩欧美一级二级三级久久久| 影音先锋一区| 国产伦精品一区二区三区免费迷| 亚洲天堂av老司机| 日韩视频免费观看高清完整版在线观看 | 一本久道久久综合婷婷鲸鱼| 国产精品18久久久久久久久久久久| 亚洲欧美日本韩国| 精品日韩av一区二区| 91久久人澡人人添人人爽欧美| 国内精品**久久毛片app| 国产成人亚洲综合a∨婷婷图片| 亚洲综合色视频| 国产三区在线成人av| 欧美伦理视频网站| 亚洲欧美日韩另类精品一区二区三区 | 色香色香欲天天天影视综合网| 欧美日本一区二区视频在线观看| 青青国产91久久久久久| 国产精品进线69影院| 日韩女优视频免费观看| 色妞www精品视频| 国产精品美女| 免费亚洲电影| 久久午夜影视| 在线观看区一区二| 欧美日韩一区二区三区视频| 欧美日韩黄视频| 日韩一区二区视频| 337p日本欧洲亚洲大胆色噜噜| 精品国产欧美一区二区| 久久精品亚洲一区二区三区浴池| 国产欧美一区二区精品性色| 中文字幕在线不卡视频| 亚洲图片欧美激情| 亚洲精品一二三四区| 亚洲午夜私人影院| 婷婷开心激情综合| 久久精品国产精品亚洲综合| 国产一区二三区好的| 国产不卡视频在线观看| www.欧美日韩国产在线| 99久久99久久免费精品蜜臀| 欧美日韩日本国产亚洲在线| 亚洲人体大胆视频| 久久亚洲午夜电影| 欧美精品日韩一区|