1. 递归方法

  1. function printNum(num, delay, callback) {
  2. setTimeout(() => {
  3. for (i = 0; i < num; i++) {
  4. console.log(i + 1);
  5. }
  6. callback()
  7. }, delay)
  8. }
  9. const a = () => { printNum(4, 3000, a) }
  10. a()

2. 闭包实现

  1. for (var i = 0; i < 4; i++) {
  2. (function (i) {
  3. setTimeout(function () {
  4. console.log(i + 1);
  5. }, i * 1000);
  6. })(i);
  7. }

3. 块级作用域

  1. // 使用 let 块级作用域
  2. for (let i = 0; i < 5; i++) {
  3. setTimeout(function() {
  4. console.log(i);
  5. }, i * 1000);
  6. }