JavaScript迭代器和生成器是为统一遍历设计的机制:迭代器提供next()方法返回{value,done},生成器函数(function*)用yield简化迭代器创建;对象实现[Symbol.iterator]()即符合迭代器协议。
JavaScript 中的迭代器和生成器函数,本质是为统一遍历行为而设计的语言机制。迭代器对象提供
方法,返回
形式的结构;生成器函数则是创建迭代器的便捷语法糖,用
声明,内部用
暂停执行并产出值。
迭代器协议:手动实现一个迭代器
任何对象只要拥有符合规范的
方法,并返回一个带
的对象,就是可迭代的。
例如,让一个普通对象支持
:
立即学习
“
Java免费学习笔记(深入)
”;
Eclipse导入Android或其他的JAVA项目的正确方法 WORD版
本文档主要讲述的是Eclipse导入Android或其他的JAVA项目的正确方法;希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看
下载
生成器函数:用 yield 控制暂停与恢复
生成器函数调用后不立即执行,而是返回一个迭代器对象。每次调用
,函数从上次暂停处继续,直到下一个
或结束。
关键点:
表达式本身有返回值,可通过下一次
传入参数接收
函数内
会令
,其值作为最终
可配合
、扩展运算符(
)、解构等使用
常见用途:惰性求值与异步流程简化
生成器天然适合处理大数据流或分步任务:
无限序列(如斐波那契):只在需要时计算下一项
读取文件行、处理分页 API:每调用一次
获取一页数据
与
库或自定义 runner 结合,实现类似 async/await 的同步写法(早于 async/await 出现)
注意边界情况
生成器一旦执行完毕(
),后续调用
总是返回
;
和
方法可用于提前终止或注入错误;不能直接
生成器函数——它不是构造器。
next(){ value, done }function*yield[Symbol.iterator]()next()for...ofconst myRange = {
from: 1,
to: 3,
[Symbol.iterator]() {
let current = this.from;
return {
next() {
if (current <= this.to) {
return { value: current++, done: false };
} else {
return { value: undefined, done: true };
}
}
};
}
};
for (const num of myRange) console.log(num); // 1, 2, 3
next()yieldyieldnext(arg)returndone: truevaluefor...of[...gen()]next()codone: truenext(){ value: undefined, done: true }throw()return()new