每隔一秒打印一个数

题目:实现 count(target),每隔 1 秒按顺序打印 1, 2, …, target。

方法一:闭包 + setTimeout

const count = function () {
  let i = 0;
  let timer;
  return function change(target) {
    i++;
    console.log(i);
    if (i === target) {
      clearTimeout(timer);
      return;
    }
    timer = setTimeout(() => {
      change(target);
    }, 1000);
  };
}();

count(5);

方法二:async + await sleep

function sleep(interval) {
  return new Promise((resolve) => setTimeout(resolve, interval));
}

async function stepPrint(n) {
  for (let i = 1; i <= n; i++) {
    console.log(i);
    await sleep(1000);
  }
}

stepPrint(5);

方法三:递归 setTimeout

const arr = [1, 2, 3, 4, 5];
function timeout(i = 0) {
  if (i < arr.length) {
    setTimeout(() => {
      console.log(arr[i++]);
      timeout(i);
    }, 1000);
  }
}
timeout();