欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

ES6中Generator函數(shù)的示例分析-創(chuàng)新互聯(lián)

這篇文章主要為大家展示了“ES6中Generator函數(shù)的示例分析”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“ES6中Generator函數(shù)的示例分析”這篇文章吧。

網(wǎng)站建設(shè)、成都做網(wǎng)站的關(guān)注點(diǎn)不是能為您做些什么網(wǎng)站,而是怎么做網(wǎng)站,有沒有做好網(wǎng)站,給創(chuàng)新互聯(lián)建站一個(gè)展示的機(jī)會(huì)來證明自己,這并不會(huì)花費(fèi)您太多時(shí)間,或許會(huì)給您帶來新的靈感和驚喜。面向用戶友好,注重用戶體驗(yàn),一切以用戶為中心。

具體如下:

1. 簡介

① 理解:可以把它理解成一個(gè)函數(shù)的內(nèi)部狀態(tài)的遍歷器,每調(diào)用一次,函數(shù)的內(nèi)部狀態(tài)發(fā)生一次改變。

② 寫法:

function* f() {}

③ 作用:就是可以完全控制函數(shù)的內(nèi)部狀態(tài)的變化,依次遍歷這些狀態(tài)。

④ 運(yùn)行過程:當(dāng)調(diào)用Generator函數(shù)的時(shí)候,該函數(shù)并不執(zhí)行,而是返回一個(gè)遍歷器(可以理解成暫停執(zhí)行)。通過調(diào)用next()開始執(zhí)行,遇到y(tǒng)ield停止執(zhí)行,返回一個(gè)value屬性值為當(dāng)前yield語句的值,done屬性為false的對(duì)象,循環(huán)調(diào)用next(),一直執(zhí)行到return語句(如果沒有return語句,就執(zhí)行到函數(shù)結(jié)束)。next方法返回的對(duì)象的value屬性,就是緊跟在return語句后面的表達(dá)式的值(如果沒有return語句,則value屬性的值為undefined),done屬性的值true,表示遍歷已經(jīng)結(jié)束。

示例:

function* helloWorldGenerator() {
 yield 'hello';
 yield 'world';
 return 'ending';
}
var hw = helloWorldGenerator();//第一次調(diào)用該方法不會(huì)執(zhí)行,僅返回一個(gè)遍歷器。
var a = hw.next();
while(!a.done){ //當(dāng)執(zhí)行到return 時(shí),a.done=true,終止循環(huán)
 console.log(a.value+','+a.done);
 a = hw.next();
}
console.log(a.value+','+a.done);

結(jié)果:

hello,false
world,false
ending,true

2. next() 的參數(shù)

① 我們要知道是next()返回一個(gè)對(duì)象,yield語句本身是沒有返回值,或者說總是返回undefined。next方法可以帶一個(gè)參數(shù),該參數(shù)就會(huì)被當(dāng)作上一個(gè)yield語句的返回值。

function* f() {
 for(var i=0; true; i++) {
  var reset = yield i;
  console.log(reset); //打印reset,驗(yàn)證yield語句是沒有返回值的
  if(reset) { i = -1; }
 }
}
var g = f();
console.log(g.next()) // { value: 0, done: false }
console.log(g.next())// { value: 1, done: false }
console.log(g.next(true)) // { value: 0, done: false }

結(jié)果:

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

通過next方法的參數(shù),就有辦法在Generator函數(shù)開始運(yùn)行之后,繼續(xù)向函數(shù)體內(nèi)部注入值。也就是說,可以在Generator函數(shù)運(yùn)行的不同階段,從外部向內(nèi)部注入不同的值,從而調(diào)整函數(shù)行為。

②由于next方法的參數(shù)表示上一個(gè)yield語句的返回值,所以第一次使用next方法時(shí),不能帶有參數(shù)。V8引擎直接忽略第一次使用next方法時(shí)的參數(shù),只有從第二次使用next方法開始,參數(shù)才是有效的。

function* foo(x) {
 var y = 2 * (yield (x + 1));
 var z = yield (y / 3);
 return (x + y + z);
}
var it = foo(5);
console.log(it.next(3))// { value:6, done:false }
console.log(it.next(12))// { value:8, done:false }
console.log(it.next(13))// { value:42, done:true }

3. for-of 遍歷generator

for...of循環(huán)可以自動(dòng)遍歷Generator函數(shù),且此時(shí)不再需要調(diào)用next方法,

一旦next方法的返回對(duì)象的done屬性為true,for...of循環(huán)就會(huì)中止,且不包含該返回對(duì)象

function *foo() {
 yield 1;
 yield 2;
 yield 3;
 yield 4;
 yield 5;
 return 6;
}
for (let v of foo()) {
 console.log(v);
}
// 1 2 3 4 5

4. yield* 語句

① 如果yield命令后面跟的是一個(gè)遍歷器,需要在yield命令后面加上星號(hào),表明它返回的是一個(gè)遍歷器。這被稱為yield*語句。

let a = (function* () {
 yield 'Hello!';
 yield 'Bye!';
}());
let b = (function* () {
 yield 'Greetings!';
 yield* a;
 yield 'Ok, bye.';
}());
for(let value of b) {
 console.log(value);
}

結(jié)果:

Greetings!
Hello!
Bye!
Ok, bye.

② yield命令后面如果不加星號(hào),返回的是整個(gè)數(shù)組,加了星號(hào)就表示返回的是數(shù)組的遍歷器。

function* gen(){
 yield* ["a", "b", "c"];
}
gen().next() // { value:"a", done:false }

遍歷嵌套數(shù)組:

function* iterTree(tree) {
 if (Array.isArray(tree)) {
 for(let i=0; i < tree.length; i++) {
  yield* iterTree(tree[i]);
 }
 } else {
 yield tree;
 }
}
const tree = [ 'a', ['b', 'c'], ['d', 'e'] ];
for(let x of iterTree(tree)) {
 console.log(x);
}// a b c d e

以上是“ES6中Generator函數(shù)的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司行業(yè)資訊頻道!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站aaarwkj.com,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

當(dāng)前標(biāo)題:ES6中Generator函數(shù)的示例分析-創(chuàng)新互聯(lián)
文章URL:http://aaarwkj.com/article34/isose.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗(yàn)、網(wǎng)站收錄、服務(wù)器托管網(wǎng)站維護(hù)、品牌網(wǎng)站建設(shè)、手機(jī)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)
日日添夜夜躁欧美一区二区| 亚洲成人大片免费在线观看| 国产传媒网站在线观看| 色哟哟视频免费在线观看| 亚洲国产精品成人久久蜜臀| 熟女人妻精品一二三四| 亚洲黄色av网站在线| 亚洲精品国产精品乱码不卞| 久久久之久亚州精品露出| 最新国产av网址大全| 日本成人精品一区二区三区| 中文字幕亚洲无级av| 黄色片黄色片美女黄色片亚洲黄色片| 蜜桃视频国产在线观看| 成人亚洲理论片在线观看| 蜜桃臀内射一区二区三区| 日本熟女肥臀一区二区| 一区二区三区在线观看美女视频 | 97人妻人人澡人人添人人爽| 精品国产第一区二区三区| 加勒比在线观看欧美一区| 欧美激情网页一区三区| 人妻天天爽夜夜爽欧美色| 亚洲成人免费在线播放| 国产精品重口调教系列| 日本人妻丰满熟妇久久| 国产熟乱老女人露脸视频| 亚洲成av人天堂影院| 亚洲高清成人综合网站| 少妇人妻系列中文在线| av影片免费网址大全| 亚洲欧美精品一中文字幕| 欧美日韩av在线一区二区| 免费欧美一级黄片播放| 日韩欧美国产麻豆91在线精品| 精品人妻系列一区二区| 国产黄色av片免费| 五月天丁香婷婷一区二区| 黑丝美女大战白丝美女| 99久久精彩免费视频| 98精品偷拍视频一区二区三区|