You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JS中Generator始终返回相同值的问题排查

问题分析:为什么生成器每次执行输出相同值

你的问题核心在于每次循环都重新创建了一个全新的生成器实例。

看这段循环代码:

for (var x = 0; x < 100; x++) console.log(infiniteList().next().value)

每次调用infiniteList()都会生成一个独立的生成器对象,每个新生成器内部的count都会被重置为0,调用next()自然只会返回初始值0。

正确的写法是只创建一次生成器实例,在循环中复用这个实例调用next():

function* infiniteList() {
  let count = 0
  while (true) yield count++
}
const generator = infiniteList()
for (var x = 0; x < 100; x++) console.log(generator.next().value)

这样生成器内部的count会持续累加,每次调用next()都会返回递增的数值。

简单总结:

  • 生成器函数每调用一次,就会生成一个独立的迭代器实例,各自维护自己的内部状态
  • 你之前的写法每次循环都新建实例,状态无法延续
  • 提前创建实例并复用,才能让内部的count保持递增

内容的提问来源于stack exchange,提问作者nxltm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 08:55:19