js中for循环 输出5个5

文章解释了JavaScript中for循环和setTimeout的执行顺序,以及var和let变量作用域的区别,重点在于理解为何在for循环中输出最大值为5,因为当i等于5时,for循环结束而setTimeout的异步任务在循环结束后执行。
摘要由CSDN通过智能技术生成

先不考虑为啥是5个5,而不是 0, 1, 2, 3, 4
理解为什么 上面下面输出最大值是4,中间的最大值是5 ,5是哪里来的。

    <script>
        for (var i = 0; i < 5; i++) {
            console.log(i,'上面')
            setTimeout(function () {
                console.log(i,'中间'); 
            }, 1000);
            console.log(i,'下面')
        }
    </script>
    <script>
      /* 
       先理解 i++的执行
       let i = 5;
       let a = i++; // 先将 i 的当前值(5)赋给 a,然后将 i 的值加 1,所以 a = 5,i = 6

       let j = 5;
       let b = ++j; // 先将 j 的值加 1(变成 6),然后将 j 的新值(6)赋给 b,所以 b = 6,j = 6
       
       在理解 上面for循环的执行
       1、第一次循环开始 输出 0 循环结束 i = 1
       2、第二次循环开始 输出 1 循环结束 i = 2
       3、第三次循环开始 输出 2 循环结束 i = 3
       4、第四次循环开始 输出 3 循环结束 i = 4
       5、第五次循环开始 输出 4 循环结束 i = 5

       5、第五次循环结束,想要进行 第六次循环 发现 当前的i = 5 不满足小于5 所以 不能进行第六次循环

       所以 循环结束之后 i = 5
       
      setTimeout是宏任务,不管它是宏任务还是微任务,他都是异步任务 ,同步任务先执行。
     
     理解以上之后,再去考虑,为啥 var 的时候是5个5 ,let的时是01234,再去考虑var和let的相同点和异同点。 
      
      */
    </script>

输出结果:
在这里插入图片描述

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值