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
相关产品推荐
相关产品推荐

