ES6生成器用法實(shí)例分析
本文實(shí)例講述了ES6生成器用法。分享給大家供大家參考,具體如下:
語(yǔ)法
何為生成器?讓我們先看看以下代碼:
function* quips(name) { yield "hello " + name + "!"; yield "i hope you are enjoying the blog posts"; if (name.startsWith("X")) { yield "it's cool how your name starts with X, " + name; } yield "see you later!"; }
你沒(méi)有看錯(cuò),這就是JavaScript代碼。是不是和你曾經(jīng)認(rèn)識(shí)的javascript不太一樣。這個(gè)函數(shù)就叫做生成器函數(shù)。生成器函數(shù)看起來(lái)和普通的函數(shù)是不是有點(diǎn)相像呢?
它們的區(qū)別如下:
一般的函數(shù)以function開(kāi)頭,而生成器函數(shù)以function* 開(kāi)頭。
生成器函數(shù)中有一個(gè)特殊關(guān)鍵字就是yield,作用就是暫停函數(shù)。配合next方法來(lái)調(diào)用可以達(dá)到一步一步的執(zhí)行函數(shù)的目的。
我們看看next方法的使用:
> var iter = quips("lf"); [object Generator] > iter.next() { value: "hello lf!", done: false } > iter.next() { value: "i hope you are enjoying the blog posts", done: false } > iter.next() { value: "see you later!", done: false } > iter.next() { value: undefined, done: true }
可以看到,每一次next方法后,生成器函數(shù)就執(zhí)行到下一個(gè)yield位置處。
基本的生成器語(yǔ)法就講完了。
應(yīng)用
生成器可以用來(lái)異步編程,我在之前的文章中有過(guò)介紹,可以參考前面一篇《基于javascript的異步編程實(shí)例詳解》
但是需要注意的是,生成器并不是用來(lái)寫(xiě)異步的,這僅僅是一種hack手段而已。
希望本文所述對(duì)大家ECMAScript程序設(shè)計(jì)有所幫助。
相關(guān)文章
js實(shí)現(xiàn)按鈕顏色漸變動(dòng)畫(huà)效果
這篇文章主要介紹了js實(shí)現(xiàn)按鈕顏色漸變動(dòng)畫(huà)效果的方法,涉及javascript鼠標(biāo)事件及頁(yè)面表單元素樣式的動(dòng)態(tài)操作技巧,需要的朋友可以參考下2015-08-08uniapp踩坑實(shí)戰(zhàn)之文件查找失敗:'uview-ui'?at?main.js解決辦法
這篇文章主要給大家介紹了關(guān)于uniapp踩坑實(shí)戰(zhàn)之文件查找失敗:'uview-ui'?at?main.js的解決辦法,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-12-12js實(shí)現(xiàn)獲取div坐標(biāo)的方法
這篇文章主要介紹了js實(shí)現(xiàn)獲取div坐標(biāo)的方法,通過(guò)調(diào)用jQuery插件實(shí)現(xiàn)獲取div元素坐標(biāo)的功能,非常簡(jiǎn)單實(shí)用,需要的朋友可以參考下2015-11-11js實(shí)現(xiàn)橫向伸展開(kāi)的二級(jí)導(dǎo)航菜單代碼
這篇文章主要介紹了js實(shí)現(xiàn)橫向伸展開(kāi)的二級(jí)導(dǎo)航菜單代碼,涉及javascript鼠標(biāo)事件及頁(yè)面元素遍歷的相關(guān)技巧,需要的朋友可以參考下2015-08-08layui問(wèn)題之自動(dòng)滾動(dòng)二級(jí)iframe頁(yè)面到指定位置的方法
今天小編就為大家分享一篇layui問(wèn)題之自動(dòng)滾動(dòng)二級(jí)iframe頁(yè)面到指定位置的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-09-09video.js 一個(gè)頁(yè)面同時(shí)播放多個(gè)視頻的實(shí)例代碼
這篇文章主要介紹了video.js 一個(gè)頁(yè)面同時(shí)播放多個(gè)視頻的實(shí)例代碼 ,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-11-11