2026-10-30 17:48:36
JavaScript中的迭代器和生成器通过生成器自动实现迭代器接口的方式协同工作,生成器提供暂停/恢复能力,迭代器提供标准化的遍历方法,二者结合简化了可迭代对象的创建与消费流程。 以下是具体协作机制与核心特性:
一、迭代器:标准化遍历的基础协议value:当前迭代步骤的值(最后一次调用时可能为undefined)。
done:布尔值,true表示遍历结束,false表示继续。
暂停与恢复:通过yield关键字暂停执行并返回指定值,下次调用next()时从暂停处恢复。
function* count() { yield 1; yield 2;}const gen = count();gen.next(); // {value: 1, done: false}gen.next(); // {value: 2, done: false}状态管理:生成器内部维护执行状态,无需手动管理变量或逻辑。
无限序列:结合循环可创建无限迭代器(如ID生成器):
function* idMaker() { let id = 0; while (true) yield id++;}const ids = idMaker();ids.next().value; // 0ids.next().value; // 1无需手动实现next():生成器自动处理迭代逻辑,开发者只需关注yield的返回值。
懒加载特性:数据按需生成,避免一次性加载全部内容(如处理大数据流或异步操作)。
示例:综合应用
// 生成斐波那契数列function* fibonacci(limit) { let [a, b] = [0, 1]; while (a <= limit) { yield a; [a, b] = [b, a + b]; }}// 使用迭代器消费数据const fibSeq = fibonacci(10);for (const num of fibSeq) { console.log(num); // 0, 1, 1, 2, 3, 5, 8}此例中,生成器fibonacci通过yield逐步产出数列值,迭代器协议使for...of能直接遍历生成器对象,二者协作高效且代码简洁。