麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發(fā) > JS > 正文

JavaScript中yield實用簡潔實現(xiàn)方式

2024-09-06 12:45:45
字體:
供稿:網(wǎng)友

剛才忽然靈機一動,迭代器我們很少會真的直接傻乎乎的next去遍歷的,那為什么一定要實現(xiàn)這個傻乎乎的next呢?直接實現(xiàn)each,這樣,這樣反過來,Yeah,一通百通,不一會兒就寫出了第一個超簡潔版本:
代碼如下:
function yieldHost(yieldFunction)
{
return function (processer)
{
var yield = function (result)
{
processer(result)
};
yieldFunction(yield);
};
}

思路一換,代碼真簡潔。
先附上例子,然后來談原理。
首先我們需要一個函數(shù)來進行枚舉,像這樣:
代碼如下:
function fun(yield)
{
for (var i = 0; i < 100; i++)
yield(i);
}

或是這樣:
代碼如下:
function fun(yield)
{
yield(1);
yield(2);
yield(3);
}

由于實現(xiàn)方式與C#的不同,所以在循環(huán)體內(nèi)也不用什么yield break或是yield continue這樣的語法,直接break或是continue就好了。
然后是實際的運用,yieldHost函數(shù)可以將上面的符合要求的fun函數(shù)轉(zhuǎn)換為一個枚舉器:
var enumerator = yieldHost(fun);
這個枚舉器其實也是一個函數(shù),像jQuery的each函數(shù)一樣,接收一個處理函數(shù)來處理枚舉:
代碼如下:
enumerator(function (item)
{
window.alert(item);
});

接下來談?wù)勗怼?
對于傳統(tǒng)的枚舉器來說,我們會認為枚舉器應(yīng)該在每次調(diào)用返回一個值,這就是next方法,但就像陳子瀚說的,這需要在yield的時候把函數(shù)停住,雖然可以實現(xiàn),但真的很麻煩。
但!事實上我發(fā)現(xiàn),大多數(shù)時候,我們都是用foreach這樣的語法來訪問枚舉器的。這樣一來就給了我一個非常討巧的辦法,不實現(xiàn)next方法,而是實現(xiàn)each方法。
each方法和next的方法的區(qū)別在哪里呢?熟悉jQuery的朋友就會知道,each方法其實可以視為將next倒過來,不是返回枚舉值,而是接收一個函數(shù),把枚舉值當(dāng)作參數(shù)傳進去。
正是這一倒,所有問題都迎刃而解了。我們沒有必要去暫停一個函數(shù)的執(zhí)行,只需要將處理枚舉值的邏輯注到這個函數(shù)里面去就完了。所以事實上這里的yieldHost就是完成了一個倒裝的工作,把enumerator接收的那個函數(shù)(也就是window.alert( item ),注到了枚舉函數(shù)中(即fun)。最終執(zhí)行的效果就像是這樣:
代碼如下:
function fun(yield)
{
window.alert(1);
window.alert(2);
window.alert(3);
}

所以就誕生了這個超簡潔的實現(xiàn)。
有了這個超簡潔的實現(xiàn),下一步就是實現(xiàn)像jQuery的each方法一樣的return true代表break和return false代表continue的功能了,只有具備了這樣的功能,才能處理無窮集,或是實現(xiàn)TakeWhile之類的功能。
老實說我對JavaScript的研究并不透徹,只想到了一個使用異常打斷的辦法,這就是第二個版本的yieldHost:
代碼如下:

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 欧美成人免费在线视频 | 黄色片在线观看网站 | 成人超碰| 欧美一级黄视频 | 精品久久久久久成人av | 精品久久久久久久久久久下田 | 一级一级一级一级毛片 | 亚洲小视频在线观看,com | 特级黄色一级毛片 | 日日操夜| 国产精品久久久久国产精品三级 | 在线视频 欧美日韩 | av日韩在线免费观看 | 国产pron | 午夜精品小视频 | 久久草草亚洲蜜桃臀 | 久久国产一级 | 国产精品久久77777 | china对白普通话xxxx | 欧美成人精品h版在线观看 久久久久久三区 | 午夜看毛片 | 九草在线 | 久久这 | 成码无人av片在线观看网站 | 精品亚洲一区二区三区 | 久久人人av | 日本精品视频一区二区三区四区 | 国产精品成人一区二区三区电影毛片 | 男女羞羞在线观看 | 免费永久看羞羞片网站入口 | 亚洲一区二区三区高清视频 | 一本色道久久综合狠狠躁篇适合什么人看 | 久久成人激情视频 | 国产成年人网站 | 毛片在哪里看 | 久草成人在线 | 久久精品免费网站 | 免费久久久 | 黄污在线观看 | 在线a亚洲视频播放在线观看 | 精品成人网 |