1. 异步(Promise / async/await / Event Loop)

  • 问题:JS 单线程 → 一次只能干一件事 → 如果等 IO,线程就卡死。

  • 解决:用 事件循环把任务分组(宏任务/微任务),让“等的事情”后台处理,等结果回来再继续。

  • 工具

    • Promise:包装未来结果,三种状态(pending → fulfilled/rejected)。

      • .then / .catch / .finally
      • 静态方法:allraceallSettledany 等。
    • async/await:Promise 的语法糖,让异步写法像同步。

异步的核心:解耦“发起任务” 和 “得到结果”


2. 迭代器(Iterator) & 可迭代对象(Iterable)

  • 迭代器:对象有 .next() 方法 → 每次返回 {value, done}
  • 可迭代对象:对象实现了 [Symbol.iterator]() → 返回迭代器。
  • 常见可迭代对象:数组、字符串、Set、Map。
  • 用途:for...of、解构、展开运算符,都依赖迭代器协议。

迭代器的核心:标准化“一个个取数据”的过程


3. Generator

  • 特殊函数:用 function* 定义,里面有 yield
  • 调用 Generator 函数不会立刻执行,而是返回一个 迭代器
  • yield 是“暂停点”,next() 是“继续”。
  • 可以写异步流程(早期配合 co 库使用)。

Generator 的核心:函数可以分段执行 + 自动实现迭代器协议


4. 异步 Generator

  • async function* 定义。
  • 每次 yield 的值会被包装成 Promise。
  • 只能用 for await...of 来遍历。
  • 场景:分页请求、流式读取文件、WebSocket 消息。

异步 Generator 的核心:能分段产出异步结果


5. 原型 & 原型链

  • 函数的 prototype 属性:决定 new 出来的对象的父亲是谁。
  • 对象的 __proto__(内部 [[Prototype]]):指向它的父亲。
  • 原型链:属性/方法查找机制,沿着 __proto__ 向上找,直到 Object.prototype
  • instanceof 原理:检查构造函数的 prototype 是否在对象的原型链上。

原型的核心:JS 用链式继承来共享方法和属性


现在我们来串起来:

  1. 迭代器协议 是 Generator 的基础

    • Generator 函数返回的对象,天然就是迭代器(实现了 .next())。
    • 所以 for...of 可以直接用在 Generator 上。
  2. Generator 与 异步 的联系

    • yield 可以暂停/恢复 → 很适合写“异步流程”。
    • async/await 就是对“Promise + Generator”模式的语法糖。
  3. 异步 Generator

    • 把异步和 Generator 融合 → 每次产出的值是 Promise。
    • 用于 逐步消费异步数据(比如网络流)。
  4. Promise / async-await 与 事件循环

    • Promise.then 放在 微任务队列
    • setTimeout 放在 宏任务队列
    • 所以输出顺序不同(Promise.then 一定比 setTimeout 先)。
  5. 原型链与这些对象的底层实现

    • 所有迭代器、Promise、Generator 对象,本质都是普通对象,只不过它们继承了一套内置的原型:

      • 数组迭代器继承自 %ArrayIteratorPrototype%
      • Generator 对象继承自 %GeneratorPrototype%
      • Promise 对象继承自 Promise.prototype
    • 换句话说:原型链是它们的底层支撑结构


最终关系图

JS 异步体系
  ├─ Event Loop(调度任务)
  │    ├─ 宏任务:setTimeout, setInterval
  │    └─ 微任务:Promise.then, queueMicrotask
  │
  ├─ Promise(未来值容器)
  │    └─ async/await(Promise语法糖)
  │
  ├─ Generator(分段执行函数)
  │    └─ 异步 Generator(Promise + Generator)
  │
  ├─ Iterator(协议:.next() {value, done})
  │    └─ Generator 天然实现
  │
  └─ Prototype Chain(所有对象的继承底层)
       └─ Promise.prototype / GeneratorPrototype / IteratorPrototype

一句话串联

  • 迭代器 规定了遍历协议;
  • Generatoryield 实现了可迭代对象;
  • 异步 Generator 把 Promise 和 Generator 融合,能产出异步结果;
  • Promise / async-await 用事件循环调度异步;
  • 原型链 是这些对象的底层支撑,让它们能共享方法和行为。
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐