欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

小議JavaScript中Generator和Iterator的使用

 更新時(shí)間:2015年07月29日 10:53:27   投稿:goldensun  
這篇文章主要介紹了小議JavaScript中Generator和Iterator的使用,文中舉了一個(gè)簡(jiǎn)單的示例來(lái)說(shuō)明二者之間的配合,需要的朋友可以參考下

一說(shuō)到 Generator,大家就會(huì)扯上異步之類是話題。這顯然是被一些奇奇怪怪的東西帶壞了。與 Generator 關(guān)系密切的應(yīng)該是 Iterator 才對(duì),拿 Generator 來(lái)處理異步也許是一些 C# 程序員才會(huì)想的事。當(dāng)然這種用法確實(shí)有一套完整的東西,只是我個(gè)人不喜歡而已。
  非要把 Generator 和異步聯(lián)系上,唯一的點(diǎn)就是 next 的調(diào)用時(shí)機(jī)。因?yàn)?next 可以異步地調(diào)用,所以 Generator 才得以被異步地濫用。
  但我覺(jué)得 next 這個(gè)方法雖然可以異步調(diào)用,但正確的使用方式應(yīng)該是同步的。至少當(dāng)一個(gè) Generator 實(shí)例被用于 for-of 循環(huán)或 [...obj] 解構(gòu)時(shí)都是連續(xù)調(diào)用 next 的。
  除了 next 的同異步問(wèn)題外,next 的參數(shù)也是個(gè)問(wèn)題。由于 next 調(diào)用時(shí)傳入的參數(shù)會(huì)被作為 yield 運(yùn)算符的返回值,所以 generator 有了更豐富的使用方式。在早期的 python 中 yield 是語(yǔ)句而不是運(yùn)算符,所以也不存在這樣的用法。后來(lái)的版本才把 yield 作為運(yùn)算符,所以才出現(xiàn)了各種坑。
  把 Generator 實(shí)例作為 Iterator 時(shí)既不會(huì)異步調(diào)用 next,也不會(huì)給 next 傳入?yún)?shù)。我覺(jué)得這才是 Generator 的正確用法?;蛘哒f(shuō)白了,Generator 就是用來(lái)實(shí)現(xiàn) Iterator 的。至少 Generator 這個(gè)名字沒(méi)有別的含義了。下面是一個(gè)用法示例:
運(yùn)行

<script>
var match = function * (pattern, string) {
 var regexp = new RegExp(pattern, 'g'); 
 for(let i; i = regexp.exec(string); yield i);
};

for(let i of match('a', 'abcabcabc')) {
 console.log(i);
}
</script>

相關(guān)文章

最新評(píng)論