小议JavaScript中Generator和Iterator的使用

 更新时间:2015年07月29日 10:53:27   投稿:goldensun  
这篇文章主要介绍了小议JavaScript中Generator和Iterator的使用,文中举了一个简单的示例来说明二者之间的配合,需要的朋友可以参考下

一说到 Generator,大家就会扯上异步之类是话题。这显然是被一些奇奇怪怪的东西带坏了。与 Generator 关系密切的应该是 Iterator 才对,拿 Generator 来处理异步也许是一些 C# 程序员才会想的事。当然这种用法确实有一套完整的东西,只是我个人不喜欢而已。
  非要把 Generator 和异步联系上,唯一的点就是 next 的调用时机。因为 next 可以异步地调用,所以 Generator 才得以被异步地滥用。
  但我觉得 next 这个方法虽然可以异步调用,但正确的使用方式应该是同步的。至少当一个 Generator 实例被用于 for-of 循环或 [...obj] 解构时都是连续调用 next 的。
  除了 next 的同异步问题外,next 的参数也是个问题。由于 next 调用时传入的参数会被作为 yield 运算符的返回值,所以 generator 有了更丰富的使用方式。在早期的 python 中 yield 是语句而不是运算符,所以也不存在这样的用法。后来的版本才把 yield 作为运算符,所以才出现了各种坑。
  把 Generator 实例作为 Iterator 时既不会异步调用 next,也不会给 next 传入参数。我觉得这才是 Generator 的正确用法。或者说白了,Generator 就是用来实现 Iterator 的。至少 Generator 这个名字没有别的含义了。下面是一个用法示例:
运行

<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>

相关文章

  • 关于JavaScript对象类型之Array及Object

    关于JavaScript对象类型之Array及Object

    这篇文章主要介绍了关于JavaScript对象类型之Array及Object,Array 类型是 ECMAScript 中最常用的类型了。而且,ECMAScript 中的数组与其他多数语言中的数组有着相当大的区别,需要的朋友可以参考下
    2023-05-05
  • 深入了解javascript中的prototype与继承

    深入了解javascript中的prototype与继承

    本篇文章,小编将和大家一起深入了解javascript中的prototype与继承,有需要的朋友可以参考一下
    2013-04-04
  • ES6基础语法之数组拓展

    ES6基础语法之数组拓展

    这篇文章介绍了ES6基础语法之数组拓展,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • JavaScript从原型到原型链深入理解

    JavaScript从原型到原型链深入理解

    这篇文章主要介绍了从原型与原型链开始讲起,如果你想知道构造函数的实例的原型,原型的原型,原型的原型的原型是什么,就来看看这篇文章吧。下面小编就来带大家一起学习一下
    2019-06-06
  • 关于jQuery参考实例2.0 用jQuery选择元素

    关于jQuery参考实例2.0 用jQuery选择元素

    本篇文章小编为大家介绍,关于jQuery参考实例2.0 用jQuery选择元素,有需要的朋友可以参考一下。
    2013-04-04
  • 在JavaScript并非所有的一切都是对象

    在JavaScript并非所有的一切都是对象

    本篇文章解释了 javascript 中的两种值类型:原始值(primitive)和对象(object),以及混合使用两种类型时的注意事项
    2013-04-04
  • JavaScript数据结构与算法之栈与队列

    JavaScript数据结构与算法之栈与队列

    在面向对象的程序设计里,一般都提供了实现队列(queue)和堆栈(stack)的方法,而对于JS来说,我们可以实现数组的相关操作,来实现队列和堆栈的功能,看下面的相关介绍.
    2016-01-01
  • 简单了解JavaScript作用域

    简单了解JavaScript作用域

    这篇文章主要介绍了JavaScript作用域的相关资料,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • JavaScript基础知识学习笔记

    JavaScript基础知识学习笔记

    本文是初学javascript的时候记的学习笔记,简单介绍了javascript的定义及用法,并附上示例,适合初学者们,老鸟请出门左转。
    2014-12-12
  • JavaScript中的Math 使用介绍

    JavaScript中的Math 使用介绍

    这篇文章主要介绍了JavaScript中Math的使用,需要的朋友可以参考下
    2014-04-04

最新评论