JS 函数的执行时机

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

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

因为JS是单线程运行的。
setTimeout语句在循环结束时才会执行,循环结束时i已经变成了6,所以会打印出6个6

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

  1. 使用 for let 配合
for(let i = 0; i<6; i++){
  setTimeout(()=>{
    console.log(i)
  },0)
}
  1. 利用函数作用域
let i = 0
for(i = 0; i < 6; i++ ){
        (function (j) {
            setTimeout(function () {
                console.log(j);
            }, 0);
        })(i);
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一、为什么如下代码会打印出六个6 setTimeout是指过一会儿再执行,也就是循环执行完再打印,当循环6次后,i...
    浪味仙儿啊阅读 1,346评论 0 2
  • 1.为什么下面代码会打印 6 个 6 setTimeout是有延迟的执行,虽然设置了0,但是对于计算机的运行速度来...
    wwfstrong阅读 1,153评论 0 0
  • 为什么打印出6 个 6? setTimeout 会过一段时间才去执行,这时候for已经循环完了所以打出6个6 为什...
    小芬芬007阅读 1,306评论 0 0
  • 很多Node.js初学者都会有这样的疑惑,Node.js到底是单线程的还是多线程的?通过本章的学习,能够让读者较为...
    越努力越幸运_952c阅读 9,052评论 4 36
  • 执行chattr -R -ai /var/spool/cron 原因:cron 默认被锁定了。防止恶意程序,自动写任务。
    Grey____阅读 5,323评论 0 0

友情链接更多精彩内容