javascript迭代器用闭包维护私有游标i,初始化为0,每次next()调用时自增并返回对应值,游标不暴露给外部,仅通过next方法间接访问和推进。

JavaScript 中迭代器用闭包维护游标位置,核心是把当前索引(游标)封装在闭包作用域里,不暴露给外部,每次调用 next() 时内部更新并返回对应值。
闭包封装游标变量
游标(比如数组下标 index)定义在生成器函数内部,不作为参数传入,也不挂载到返回对象上。这样外部无法直接读写,只能通过 next() 方法间接访问和推进。
- 游标变量初始化为
0,每次next()执行后自增 - 闭包让该变量在多次
next()调用间保持状态,不会重置 - 返回的迭代器对象只暴露
next方法,不暴露游标本身
手动实现一个数组迭代器
下面是一个典型例子:基于闭包的数组迭代器,游标 i 完全私有:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
function createArrayIterator(arr) {
let i = 0; // 游标,被闭包捕获
return {
next() {
if (i
<h3>与原生 <code>Symbol.iterator</code> 的区别</h3>
<p>原生迭代器(如数组的 <code>[Symbol.iterator]()</code>)底层也用类似机制维护状态,但对用户透明。手动用闭包实现,好处是可控性强:</p>
- 可以定制游标逻辑(比如跳过偶数索引、反向遍历)
- 可添加重置方法(如
reset()),只需在闭包内暴露额外函数 - 避免依赖
for...of或扩展运算符,适合流式/惰性数据场景
注意点:避免闭包意外共享
如果多个迭代器共用同一个闭包作用域(比如在循环中错误地复用变量),会导致游标错乱。正确做法是确保每个迭代器都有独立的闭包:
- 每次调用生成器函数都创建新闭包,各自拥有独立
i - 不要把游标定义在函数外或模块顶层
- 调试时可通过
console.dir(it)确认闭包中只有预期变量
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










