如何每秒在索引中连续输出每个数字?

Ral*_*thy 2 javascript for-loop setinterval console.log

我有以下循环:

for (let index = 0; index < 4; index++) {  
  setInterval(function() {
    console.log(index)
  }, 1000);
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能让它控制台记录第一秒 0,第二秒 1,第三秒 2,第四秒 3,第五秒 0,依此类推,直到间隔被清除?

FZs*_*FZs 6

这是使用生成器函数的或多或少但更优雅的解决方案。

生成器函数在这里很有用,因为它们的执行可以通过 暂停yield,并通过调用生成器对象的next方法恢复:

function* logger() {
  while (true) {
    for (let index = 0; index < 4; index++) {
      console.log(index)
      yield
    }
  }
}

let generator = logger()
setInterval(() => generator.next(), 1000)
Run Code Online (Sandbox Code Playgroud)

或者,再次使用生成器,您甚至可以yield使用当前的index,并让间隔函数记录(或用它做任何其他事情):

function* logger() {
  while (true) {
    for (let index = 0; index < 4; index++) {
      yield index
    }
  }
}

let generator = logger()
setInterval(() => console.log(generator.next().value), 1000)
Run Code Online (Sandbox Code Playgroud)