《JS 函数的执行时机》

120 阅读1分钟

一、打印出6个6

let i = 0
for(i = 0; i<6; i++){
  setTimeout(()=>{
    console.log(i)
  },0)
}

把i声明在for循环外面,并且用setTimeout的时候,会打印出6个6,而不0,1,2,3,4,5
这是因为,setTimeout函数是过段时间执行的意思。setTimeout的代码会最后执行,循环过程中i从0到6,一共执行了六次

二、打印出0,1,2,3,4,5的方法

方法一、用let在for循环里面声明变量(最优解)

for(let i = 0; i<6; i++){
  setTimeout(()=>{
    console.log(i)
  },0)
}

把变量声明在for循环里面就可以;js自己在let和for一起使用的时候加了东西,每次循环都会创建一个i。let会生成一个局部作用域

方法二、用立即执行函数

for (var i = 0; i< 6; i++){
      ! function (i){
        setTimeout(() => {
          console.log(i)
        },0);
      }(i)
    }

方法三、setTimeout调用每次循环完i的值

for (var i = 0; i< 6; i++){
      setTimeout((i) => {
        console.log(i)
      }, 0,i);
    }