《JS 函数的执行时机》

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

执行这段代码会打印出6个6 ,原因是什么?
答:因为setTimeout(()=>{ console.log(i) },0) 是尽快打印出i,setTimeout()是一个定时器,定时时间越短,延迟打印时间越短,可以理解为最快的时间去打印。意思是每当遍历0-5后就就打印出结果5,而5的索引是6,所以遍历六次后,六次的结果都打印出来,所以是6个6。为什么不会打印0 1 2 3 4 5 是因为 for 和 let 一起使用,js会自动加东西,这是js为了迎合新手产生类似疑问而修改的,所以没打印一次,就会复制一遍结果放进去不作出更新,知道打印出其他结果为止。

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

for(let i = 0; i<6; i++){
  setTimeout(()=>{
    console.log(i)
  },0)
}
for(let i = 0; i<6; i++){
 console.log(i)
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。