日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

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

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

生成器是在函數內部運行的一些代碼

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

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

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

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

定義特殊的生成器函數 調用該函數創建一個生成器對象 在循環中使用該生成器對象,或直接調用其 next 方法

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

// 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 }

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

生成器函數

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

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

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

function*createGeneratorfunction* createGeneratorfunction *createGenerator

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

調用生成器函數

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

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

但是要記住:createGenerator 函數沒有返回值。這是因為生成器函數沒有傳統的返回值。相反,當你直接調用生成器函數時,它總是返回實例化的 Generator 對象。

這個生成器對象具有一個 next 方法。調用 next 將在生成器函數內部運行代碼。

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

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

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

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

這就是為什么我們要調用兩次 next

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

會得到以下輸出:

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

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

{ value: undefined, done: true }生成器和循環

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

// 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)}

當在 for...of 循環中使用生成器對象時,每次循環都會在生成器對象上調用 next,并用產生的值填充變量(上面的 value)。運行該程序將會輸出以下內容:

$ node sample-program.js01234

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

總結

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

標簽: JavaScript
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
老司机久久99久久精品播放免费| 久久精品播放| 免费在线成人| 久久精品免费看| а√在线中文在线新版| 日韩毛片视频| 日韩欧美一区二区三区免费看| 国产欧美视频在线| 国产日韩视频| 麻豆国产精品视频| zzzwww在线看片免费| 精品午夜视频| av资源亚洲| 久久在线视频免费观看| 91精品一区二区三区综合在线爱 | 国产欧美在线| 国产精品成人一区二区不卡| 五月天久久久| 亚洲一区二区三区免费在线观看 | xxxxx性欧美特大| 亚洲精品小说| 日本h片久久| 肉色欧美久久久久久久免费看| 日韩欧美一区二区三区在线视频| а√在线中文在线新版| 久久国产亚洲| 欧美.日韩.国产.一区.二区| 一区二区精品| 国产精品探花在线观看| 另类中文字幕国产精品| 亚洲一区二区三区免费在线观看| 中文字幕亚洲在线观看| 国产精品嫩模av在线| 麻豆高清免费国产一区| 在线国产一区二区| 欧美片网站免费| 人人精品亚洲| 日av在线不卡| 国产精品久久久久久久久久齐齐| 国产成人黄色| 亚洲免费资源| 精品在线网站观看| 伊人久久一区| 亚洲涩涩在线| 奇米狠狠一区二区三区| 亚洲国内精品| 国内精品麻豆美女在线播放视频| 午夜国产一区二区| 精品美女视频| 国产精品草草| 欧美色综合网| 日韩精品一区二区三区免费视频| 久久久久久色| 久久影视三级福利片| 亚洲免费播放| 激情中国色综合| 激情综合网站| 九九九精品视频| 日韩精品国产精品| 免费观看在线色综合| 日本免费久久| 国产成人精品免费视| 91亚洲国产成人久久精品| 日韩精品中文字幕一区二区| 国产成人1区| 久久激情av| 中文不卡在线| 亚洲高清毛片| 色偷偷偷在线视频播放| 国产精品欧美三级在线观看 | 亚洲欧美日韩国产一区| 亚洲二区视频| 五月天久久久| 欧美午夜不卡| 丝袜a∨在线一区二区三区不卡| 久久视频一区| 亚洲播播91| 国产va免费精品观看精品视频| bbw在线视频| 日韩国产激情| 午夜日韩av| 久久国产高清| 欧美 日韩 国产精品免费观看| 在线综合亚洲| 欧美日韩免费看片| 粉嫩av一区二区三区四区五区| 精品一区二区三区中文字幕视频| 国产欧美一级| 国产美女高潮在线| 欧美国产一级| 肉色欧美久久久久久久免费看| 91欧美在线| 亚洲夜间福利| 国产精品久久久久久模特 | 亚洲精品1区| 国产精品一区二区三区av麻| 你懂的国产精品| 91精品久久久久久久久久不卡| 91精品二区| 国产毛片久久久| 亚洲成人二区| 国产亚洲一区在线| 国产精品久久久久久久久久白浆 | 久久99免费视频| 国产成人免费视频网站视频社区| 九九综合在线| 久久国产精品免费精品3p| 欧美精品福利| av中文字幕在线观看第一页| 性色一区二区| 国产精品亚洲四区在线观看| 日韩成人高清| 91亚洲精品在看在线观看高清| 亚洲精品国产嫩草在线观看| 亚洲永久字幕| 国产精品成人一区二区不卡| 久久精品观看| 欧美国产视频| 日韩欧美2区| 国产91精品对白在线播放| 91大神在线观看线路一区| 日韩在线中文| 国产精品视频3p| 成人午夜在线| 蜜桃久久精品一区二区| 激情欧美亚洲| 视频小说一区二区| 亚洲va中文在线播放免费| 精品一区91| 日韩欧美美女在线观看| 中文字幕免费精品| 亚洲2区在线| 免费黄网站欧美| 六月天综合网| 爽好多水快深点欧美视频| 国产精品嫩草99av在线| 亚洲深夜福利| 免费观看在线色综合| 午夜电影一区| 欧美日本精品| 国产精品一区亚洲| 18国产精品| 国产精品一区高清| 久久中文字幕一区二区| 亚洲图片久久| 欧美一区自拍| 国产激情久久| 精品美女视频| 亚洲性色视频| 人人爽香蕉精品| 青青草精品视频| 精品国产亚洲日本| 精品捆绑调教一区二区三区| 久久精品动漫| 久久国产精品久久w女人spa| 在线看片一区| 国产精品乱战久久久| 中文在线中文资源| 蜜臀91精品国产高清在线观看| 999国产精品| 久久高清免费观看| 国产乱码精品一区二区三区亚洲人 | 成人美女视频| 亚洲激精日韩激精欧美精品| 免费黄网站欧美| 国产精品传媒麻豆hd| 亚洲专区视频| 亚洲欧美日韩专区| 欧美综合另类| av资源亚洲| 国产传媒在线观看| 亚洲二区精品| 亚洲免费激情| 黑人精品一区| 久久成人精品| 欧美精品第一区| 天堂成人免费av电影一区| 亚洲精品激情| 成人免费电影网址| 国产精品蜜月aⅴ在线| 桃色一区二区| 欧美精品91| 91精品尤物| 狠狠久久伊人中文字幕| 久久不卡国产精品一区二区| 国产麻豆久久| 黄毛片在线观看| 国产一区二区三区国产精品| 日本亚洲视频| 欧美激情久久久久久久久久久| 亚洲精品一二| 男人的天堂亚洲一区| 香蕉久久一区| 一级成人国产| 黄色aa久久| 国产在线欧美| 麻豆高清免费国产一区| 日韩精品免费一区二区三区| 久久久久免费| 蜜桃91丨九色丨蝌蚪91桃色|