返回课程

每秒输出一个数字

重要性:5

编写一个函数 printNumbers(from, to),该函数每秒输出一个数字,从 from 开始,到 to 结束。

制作两种解决方案。

  1. 使用 setInterval
  2. 使用嵌套的 setTimeout

使用 setInterval

function printNumbers(from, to) {
  let current = from;

  let timerId = setInterval(function() {
    alert(current);
    if (current == to) {
      clearInterval(timerId);
    }
    current++;
  }, 1000);
}

// usage:
printNumbers(5, 10);

使用嵌套的 setTimeout

function printNumbers(from, to) {
  let current = from;

  setTimeout(function go() {
    alert(current);
    if (current < to) {
      setTimeout(go, 1000);
    }
    current++;
  }, 1000);
}

// usage:
printNumbers(5, 10);

请注意,在这两种解决方案中,第一次输出之前都会有一个初始延迟。函数第一次调用是在 1000ms 之后。

如果我们也希望函数立即运行,那么可以在单独的行上添加一个额外的调用,如下所示

function printNumbers(from, to) {
  let current = from;

  function go() {
    alert(current);
    if (current == to) {
      clearInterval(timerId);
    }
    current++;
  }

  go();
  let timerId = setInterval(go, 1000);
}

printNumbers(5, 10);