javascript迭代器与生成器的区别

javascript迭代器与生成器的区别,javascript,collections,iterator,generator,Javascript,Collections,Iterator,Generator,我阅读了javascript的新功能Iterator和Generator,但我没有了解应该在Generator上使用Iterator。另外,这两者之间的主要区别是什么。迭代器允许您封装遍历。因此,给定一个项目,您可以进入下一个项目。例如,如果你戴着眼罩,有一排人,每个人都拿着前面那个人的衬衫,你可以跟着他们的手穿过队列。在这个例子中,你将是一个迭代器,跟踪你接触的人,而这些人将是Iterables 我认为生成器是一个状态机,每一个产出都是一个状态转换。例如,如果你有下面的生成器函数 functi

我阅读了javascript的新功能
Iterator
Generator
,但我没有了解应该在
Generator
上使用
Iterator
。另外,这两者之间的主要区别是什么。

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

我认为生成器是一个状态机,每一个产出都是一个状态转换。例如,如果你有下面的生成器函数

function* idMaker() {
  var index = 0;
  while(true)
    yield index++;
}
如果你从状态1->2->3等处跳下,你可以直观地将每个状态看作是队列中的一个人,每次你让步时,你都会跟着抓住下一个人衬衫背面的人的手,以获得下一个状态


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

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