javascript迭代器和生成器之间的差异

时间:2017-07-18 06:01:45

标签: javascript collections iterator generator

我阅读了javascript新功能IteratorGenerator here,但我没有了解Iterator优于Generator的情况。这两者之间的主要区别是什么。

1 个答案:

答案 0 :(得分:1)

Iterator允许您封装遍历。因此,给定一个项目,您可以进入下一个项目。例如,如果你有一个眼罩并且你有一排人并且每个人都拿着他们面前的人的衬衫,你可以通过跟随他们的手来穿过人的队列。在这个例子中,你将成为Iterator,跟踪你的触摸对象,人们将成为Iterables。

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

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

如果从状态1跳转 - > 2 - > 3直观地,您可以将每个州视为队列中的一个人,每次屈服时,您都会抓住抓住下一个人衬衫背面的人的手,以获得下一个状态。 / p>

现在,它变得更加混乱。生成器对象是迭代器和Iterables。您可以在生成器对象上调用generator.next()以获取下一个生成的值,并调用生成器[Symbol.iterator]以获取将具有其自己的next()函数的迭代器对象。