写代码啦
《JS 函数的执行时机》
回复数(0) 浏览数(30)
{{topic.upvote_count || 0}} 编辑 回复

解释为什么如下代码会打印 6 个 6

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

setTimeout 指过一会再执行,每进行一次循环都会设定一个延时,每次循环执行完的最后结果都是6,共循环了6次,故可以打出6个6。

上面代码打印 0、1、2、3、4、5 的方法

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

for let 配合使用时 JS会把 i 在循环中重新声明一次不会因延时就继续运行,所以不是6个6。

除了使用 for let 配合,还有什么其他方法可以打印出 0、1、2、3、4、5,

结合立即执行函数

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

{{topic.upvote_count || 0}}

解释为什么如下代码会打印 6 个 6

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

setTimeout 指过一会再执行,每进行一次循环都会设定一个延时,每次循环执行完的最后结果都是6,共循环了6次,故可以打出6个6。

上面代码打印 0、1、2、3、4、5 的方法

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

for let 配合使用时 JS会把 i 在循环中重新声明一次不会因延时就继续运行,所以不是6个6。

除了使用 for let 配合,还有什么其他方法可以打印出 0、1、2、3、4、5,

结合立即执行函数

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

30
回复 编辑