這篇文章主要講解了“ES6的yield示例分析”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“ES6的yield示例分析”吧!
創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比墊江網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式墊江網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋墊江地區(qū)。費(fèi)用合理售后完善,十載實(shí)體公司更值得信賴。近期ES6標(biāo)準(zhǔn)如火如荼的發(fā)展,其中主要還是各大瀏覽器的支持,最重要廠商支付寶,微信的支持,使得國內(nèi)的發(fā)展也很迅猛。這里主要是對yield關(guān)鍵字的,yield實(shí)際上可以看作是一種新的中斷機(jī)制,大家都知道javascript函數(shù)執(zhí)行是順序的,中途沒有暫停,等待消息只能通過回調(diào)或者settimeout等延遲檢查來完成。
對ES6的yield示例分析
有些示例說yield和線程有關(guān)系,不過我在官方示例中沒看出來,好了進(jìn)入主題,先來看看官方示例。
function*foo(x){
vary=2*(yield(x+1));
varz=yield(y/3);
return(x+y+z);
}
varit=foo(5);
console.log(it.next());
console.log(it.next(12));
console.log(it.next(13));
//返回值是{value:6,done:false},{value:8,done:false},{value:42,done:true}
yield示例要點(diǎn)
第一點(diǎn):foo需要是*型的,新增的*帶來的是這個函數(shù)指針,這個函數(shù)必須是*型的,否則的話varit=foo(5),就表示得到函數(shù)執(zhí)行的結(jié)果,而指針型的,表示it取得該函數(shù)。
第二點(diǎn):第一個it.next()表示開始執(zhí)行函數(shù),直到第一個yield停止。返回值是yield(表達(dá)式的值),這個時候的返回時是x+1,x是5,結(jié)果就是6.這里的it.next如果帶參數(shù),則參數(shù)會被忽略,因為首次執(zhí)行沒有參數(shù)可再傳遞.
第三點(diǎn):第二個it.next(12)表示上一個yield的返回結(jié)果是12,帶進(jìn)去也就是vary=2*12;這個地方必須帶值,因為yield內(nèi)是表達(dá)式(x+1),不是常量,無法自己計算,這里為什么不把之前的x缺省帶進(jìn)去計算,只能說目前的機(jī)制不是這樣,
應(yīng)該是考慮到實(shí)現(xiàn)的復(fù)雜程序,因為這里的x是一個變量,實(shí)際運(yùn)行中,這個還可能是表達(dá)式,甚至還有作用域的問題考慮,這里計算出的y=2*12=24,一直計算到下一個yield(24/3),結(jié)果是8。
第四點(diǎn):第三個it.next(13)同樣表示上一個yield的返回結(jié)果是13,帶進(jìn)去也就是varz=13;后面已經(jīng)沒有yield了,就去函數(shù)的返回值return5+24+13,結(jié)果等于42,這個時候done的值是true,表示函數(shù)結(jié)束。
重要的總結(jié)下:function需要是指針,記住yield(表達(dá)式)執(zhí)行的結(jié)果是上一個執(zhí)行的值。
這樣yield的關(guān)鍵字是不是清晰了?
在實(shí)際工作中并不是it.next()一定要到函數(shù)最終的return,例如第一次執(zhí)行it.next(),取得返回值不符合預(yù)期的值,可以直接不執(zhí)行后期的next了,例如多層校驗。
感謝各位的閱讀,以上就是“ES6的yield示例分析”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對ES6的yield示例分析這一問題有了更深刻的體會,具體使用情況還需要大家實(shí)踐驗證。這里是創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司,,小編將為大家推送更多相關(guān)知識點(diǎn)的文章,歡迎關(guān)注!