返回課程

每秒輸出

重要性: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);