国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服務器之家 - 編程語言 - JavaScript - js教程 - Javascript生成器(Generator)的介紹與使用

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

2022-01-12 16:51瘋狂的技術宅 js教程

這篇文章主要給大家介紹了關于Javascript生成器(Generator)的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

什么是生成器?

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

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

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

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

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

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

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

?
1
2
3
4
5
6
7
8
9
10
11
// File: sample-program.js
function *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 }

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

生成器函數

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

?
1
2
3
4
5
function* createGenerator() {
 for(let i=0;i<20;i++) {
 yield i
 }
}

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

?
1
2
3
function*createGenerator
function* createGenerator
function *createGenerator

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

調用生成器函數

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

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

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

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

?
1
2
3
4
5
function* createGenerator() {
 for(let i=0;i<20;i++) {
  yield i
 }
}

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

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

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

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

?
1
2
console.log(generator.next())
console.log(generator.next())

會得到以下輸出:

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

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

?
1
{ value: undefined, done: true }

生成器和循環

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

?
1
2
3
4
5
6
7
8
9
10
11
12
// File: sample-program.js
@highlightsyntax@jscript
function *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.js
0
1
2
3
4

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

總結

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

原文鏈接:https://mp.weixin.qq.com/s/BU3-GQ09gSxnVB6s4hGJXw

延伸 · 閱讀

精彩推薦
  • js教程JS addEventListener()和attachEvent()方法實現注冊事件

    JS addEventListener()和attachEvent()方法實現注冊事件

    這篇文章主要介紹了JS addEventListener()和attachEvent()方法實現注冊事件,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,...

    C語言中文網9582021-12-30
  • js教程JavaScript實現通訊錄功能

    JavaScript實現通訊錄功能

    這篇文章主要為大家詳細介紹了JavaScript實現通訊錄功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    書寫夢想的鉛筆頭5722021-12-20
  • js教程基于JavaScript實現簡單掃雷游戲

    基于JavaScript實現簡單掃雷游戲

    這篇文章主要介紹了基于JavaScript實現簡單掃雷游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    北冰洋_WH4342021-12-23
  • js教程js簡單粗暴的發布訂閱示例代碼

    js簡單粗暴的發布訂閱示例代碼

    這篇文章主要給大家介紹了js簡單粗暴的發布訂閱的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要...

    威威威威vvvv6342022-01-06
  • js教程原生js實現自定義難度的掃雷游戲

    原生js實現自定義難度的掃雷游戲

    這篇文章主要為大家詳細介紹了原生js實現自定義難度的掃雷游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    清歡灬6462022-01-06
  • js教程原生js實現自定義滾動條

    原生js實現自定義滾動條

    這篇文章主要為大家詳細介紹了原生js實現自定義滾動條,可點擊、拖動到達,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可...

    Xaivor4072022-01-05
  • js教程Bootstrap FileInput實現圖片上傳功能

    Bootstrap FileInput實現圖片上傳功能

    這篇文章主要為大家詳細介紹了Bootstrap FileInput實現圖片上傳功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    RNG-航仔8032022-01-10
  • js教程js制作提示框插件

    js制作提示框插件

    這篇文章主要介紹了js制作提示框插件的方法,幫助大家更好的理解和使用js,感興趣的朋友可以了解下...

    lanshanxiao10172021-12-18
主站蜘蛛池模板: 成人黄页在线观看 | 日本一区二区精品视频 | 黄色精品在线 | 天操天天干| 能免费看的av | 国产伦精品一区二区三区四区视频 | 日韩一二三区视频 | 国产成人a亚洲精品 | 91精品国产色综合久久 | 亚洲一区av在线 | 日本福利在线观看 | 中文字幕在线精品 | 久久99er6热线精品首页蜜臀 | 蜜桃视频一区二区三区 | 玖玖视频 | 日本天天操 | 艹逼网| 久久综合九色综合网站 | 久久久免费电影 | 夜夜骑日日操 | 成人3d动漫一区二区三区91 | 久久大陆| 久久久久久久久久久动漫 | 亚洲免费av在线 | 岛国免费 | 一区影院 | 人一级毛片 | 久久亚洲一区 | 69久久久久久| 久久国产欧美日韩精品 | 欧美日韩一区二区三区 | 日韩一级免费观看 | 俺来也俺也啪www色 性色视频在线 | 在线欧美视频 | 欧美日韩精品免费 | 国产精品1| 精品欧美乱码久久久久久1区2区 | 毛片免费在线 | 精品一区二区三区在线观看 | 久久久在线 | 欧美一级片 |