JS 函数的执行时机

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

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

在for循环执行时i的值按照0,1,2,3,4,5值的变化,最后i的值是5,5小于6,i++,5变成6。i本该在条件表达式i<6的判断时被中断,但又因为setTimeout是异步的,for结束以后setTimeout把计算结束后的i=6打印出来了,setTimeout

运行6次所以打印了6次

 

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

for(let i = 0; i<6; i++){
  setTimeout(()=>{
    console.log(i)
  },0)
}  
//js在for和let一起用的时候会加东西
//每次循环会多创建一个i

  

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

因为setTimeOut()是异步执行,所以我们让它立即执行就可以了。

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

  这段函数会让JS检测到setTimeOut时不再放到队列中进行等待,而是立即运行setTimeOut()。所以能按我们所想的进行输出。

posted @ 2020-12-17 22:49  时间观测者  阅读(52)  评论(0编辑  收藏  举报