JS函数的执行时机

76 阅读1分钟
let i = 0
for(i = 0;i<6;i++){
setTimeouy(()=>{
console.log(i)
},0)
}

以上函数会打印出6个6,用let声明的i,在全局作用域里,setTimeout里的内容是异步代码,不论设了定时是多少,都会在当前同步代码执行完之后执行。

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

以上代码会打印出:0,1,2,3,4,5。这里let声明的i,是在局部作用域里。

除了使用for let配合,以下方法也可以打印出0,1,2,3,4,5

①闭包

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

②利用 setTimeout 的第三个参数,将i传进去

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

③利用 const 关键字

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