JavaScript 迭代器关闭和 return 方法有什么作用?
了解 for...of、生成器和提前退出时的迭代器清理协议,避免自定义迭代器泄露资源。
参考答案
迭代器除了 next(),还可能提供 return()。当 for...of 因 break、异常或其他提前结束路径退出时,语言可以调用这个方法,让生成器或自定义迭代器清理资源。生成器的 finally 通常依赖这种关闭行为执行清理。
如果手动调用 next(),就不能假设循环会替你关闭迭代器;需要根据协议在适当时机调用 return()。自定义迭代器中的清理应保持幂等,并处理 return() 自身抛错的边界。
异步迭代器对应 return() 的异步清理语义,for await...of 还涉及 Promise 和异步异常。迭代器关闭不是取消底层网络请求的通用机制,必要时仍要显式连接 AbortSignal。