Iterable、Iterator、Generator 关系

Iterable、Iterator 和 Generator 的关系、协议与消费方式总览。

#type / synthesis #status / growing #resource / javascript #resource / ecmascript

[!info] related notes

Iterable、Iterator、Generator 关系

一句话结论

  • Iterable: 能提供默认迭代器的对象
  • Iterator: 通过 next() 一步步产出值的对象
  • Generator: 用 function* 写出来的 Iterator 生成器

关系链

Iterable --[Symbol.iterator()]--> Iterator --[next()]--> value/done

为什么这三者要放一起

因为很多语言特性其实消费的是“可迭代对象”而不是单纯数组:

  • for...of
  • 展开运算符
  • Array.from()
  • 解构赋值

常见误区

  • 以为 Iterable 和 Iterator 是一个东西
  • 以为 Generator 是异步专用
  • 以为只要有数组就能理解所有迭代协议

推荐阅读顺序

  1. Iterable
  2. Iterator
  3. Generator
创建于 2026/4/7 更新于 2026/5/27