Generator 的 return() 方法用于立即终止生成器并返回 { value: ..., done: true } 对象,跳过后续 yield;传入值作为 value,done 恒为 true;即使已结束,多次调用仍返回相同结构;finally 块仍执行,但 for...of 不自动调用 return()。

Generator 的 return() 方法用于立即终止生成器执行,并返回一个形如 { value: ..., done: true } 的对象。它会跳过后续所有 yield 表达式,直接结束迭代。
return() 的基本行为
调用 generator.return(value) 时:
- 生成器函数立即停止执行,不再继续任何未完成的
yield或后续逻辑; - 返回的对象中
value是传入的参数(若未传则为undefined),done恒为true; - 如果生成器已处于
done: true状态,多次调用return()仍返回相同结构的对象(value为首次传入值或undefined)。
与 next()、throw() 的区别
return() 不同于 next() 和 throw():
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
-
next()推进到下一个yield,可能暂停也可能结束; -
throw()向当前暂停点抛出异常,可被try...catch捕获; -
return()强制终结,不触发catch块,也不执行finally中的清理代码(除非生成器内部有try...finally且尚未退出)。
实际使用示例
看一个典型场景:
function* counter() {
try {
yield 1;
yield 2;
yield 3;
} finally {
console.log('cleanup run');
}
}
<p>const gen = counter();
console.log(gen.next()); // { value: 1, done: false }
console.log(gen.return('end')); // { value: 'end', done: true }
// 输出:'cleanup run'
console.log(gen.next()); // { value: undefined, done: true }(已结束,忽略后续调用)</p>注意:finally 块仍会执行 —— 这是 Generator 规范中定义的“清理语义”,即使由 return() 触发也会运行。
配合 for...of 循环的注意事项
for...of 隐式调用 next(),但不会主动调用 return()。如果想提前退出并触发清理,需手动调用:
- 直接调用
generator.return(); - 或使用
break+ 显式return()(因为for...of本身不自动释放资源); - 浏览器/Node.js 环境中,垃圾回收不会自动触发
return(),必须显式调用才能确保finally执行。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










