【问题标题】:Diffrence between javascript Iterator and Generatorjavascript迭代器和生成器之间的区别
【发布时间】:2017-07-18 06:01:45
【问题描述】:

我阅读了 Iterator 和 Generator here 的 javascript 新功能,但我不知道在哪种情况下我们应该使用 Iterator 而不是 Generator。这两者之间的主要区别是什么。

【问题讨论】:

  • 该链接中的描述非常清楚 - 使用正确的工具完成工作,即在钉子上使用锤子,在螺丝上使用螺丝刀

标签: javascript collections iterator generator


【解决方案1】:

Iterator 允许您封装遍历。因此,给定一个项目,您可以进入下一个项目。例如,如果你戴着眼罩,有一排人,每个人都拿着前面那个人的衬衫,你可以跟随他们的手来遍历队列。在此示例中,您将是跟踪您所接触的人的迭代器,而人员将是迭代器。

我认为生成器是一个状态机,每个 yield 都是一个状态转换。因此,例如,如果您有以下生成器函数

function* idMaker() {
  var index = 0;
  while(true)
    yield index++;
}

如果会从状态 1 -> 2 -> 3 等跳转。直观地,您可以将每个状态视为排队中的一个人,每次您让步时,您都在跟随那个人的手抓住下一个人的衬衫背面得到下一个状态。

现在这里变得更加混乱了。生成器对象既是迭代器又是迭代器。您可以在生成器对象上调用 generator.next() 来获取下一个产生的值,也可以调用 generator[Symbol.iterator] 来获取具有自己的 next() 函数的迭代器对象。

【讨论】:

    猜你喜欢
    • 2017-08-06
    • 2010-11-04
    • 2019-10-25
    • 2010-12-04
    • 1970-01-01
    • 1970-01-01
    • 2021-03-21
    • 2016-09-04
    • 2020-09-18
    相关资源
    最近更新 更多