for循环结束,全局变量i的结果为什么是5呢?

for循环结束,全局变量i的结果为什么是5呢?

图片描述
i的值不是小于5最大取值到4吗,不明白5是怎么来的

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
imooc_慕慕 2023-01-12 09:50:07

同学你好,分析如下:

当执行for循环执行过程中,会往arr中,追加函数。当push的时候会向空数组中追加函数。

https://img1.sycdn.imooc.com//climg/63bf6ace09a418cd03700288.jpg

因此for循环结束之后,arr中有5个function () {  alert(i) },arr的形式如下:

https://img1.sycdn.imooc.com//climg/63bf66810973ec2a02540132.jpg

当调用的时候即会寻找arr数组中对应的函数,arr[2]();

而数组中的函数中并没有变量i就会向函数外层找,然后找到全局的i在for循环中使用var声明的变量i即为全局变量i,for循环结束,全局的变量i是5:

https://img1.sycdn.imooc.com//climg/63bf6ab909b55d3307080214.jpg

因为在for循环中最后的i会执行i++这一步,然后再执行序号2,如果不满足则退出循环体,因此全局的i最后是5

https://img1.sycdn.imooc.com//climg/63bf6b3c090a003714120573.jpg

同学可以回顾一下课程,参考地址https://class.imooc.com/lesson/2120#mid=50321

因此每当执行一个数组中的这个函数结果就会是5。

祝学习愉快~

  • //这样的代码和原来的代码一样吗?
    var arr=[
                function(){alert(i)},
                function(){alert(i)},
                function(){alert(i)},
                function(){alert(i)},
                function(){alert(i)}
            ];
            console.log(i);
            for(var i=0;i<5;i++){
                arr.push(function(){
                    alert(i);
                })
            }

    结果为啥不是undefined

    2023-01-12 12:39:14
  • 同学你好,分析如下:

    在代码的最后执行了数组中的函数,比如:

    arr[0]();

    https://img1.sycdn.imooc.com//climg/63bf9572096c947803170325.jpg

    此时指向的是数组中的第一项,那么后面的括号即为执行该函数。它会沿着作用域链向上查找到全局作用域的i值5。

    https://img1.sycdn.imooc.com//climg/63bf978a0946d0ab09050375.jpg

    同学可以再重新理解理解。

    祝学习愉快~

    2023-01-12 13:12:51
  • 提问者 踩一个脚印 #3

    也就是说推入的函数中的alert(i)的i和for循环定义的全局变量i不是一个i对吗

    2023-01-12 16:10:32
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师