用 let 为什么是2

用 let 为什么是2

let arr = [];

for (let i = 0; i < 5; i++) {

    arr.push(function () {

        console.log(i);


    });

}

arr[2]();         //2



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

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

1回答
卡布琦诺 2022-05-15 16:42:42

同学你好,for循环每循环一次,向arr数组中添加一个数,过程如下:

① i = 0时,符合i < 5条件,向arr中添加数字0

②上一步执行i++后,此时,i=1,符合i < 5条件,向arr中添加数字1

③上一步执行i++后,此时,i=2,符合i < 5条件,向arr中添加数字2

④上一步执行i++后,此时,i=3,符合i < 5条件,向arr中添加数字3

⑤上一步执行i++后,此时,i=4,符合i < 5条件,向arr中添加数字4

⑥上一步执行i++后,此时,i=5,不符合i < 5条件,结束循环

因此,当for循环结束后,arr中包含数字0,1,2,3,4。即此时的arr数组是arr[0,1,2,3,4],arr[2]();返回值为2是因为arr数组下标为2的数是2。

https://img1.sycdn.imooc.com//climg/6280bcfe09cace0814160663.jpg

祝学习愉快!

  • 用var和let结果不一样是为什么


    2022-06-19 23:02:49
  • 同学你好,关于同学的问题解答如下:

    1、let声明的变量每次循环都创建一个块级作用域,并且存上i的值,也就是每循环一次存上一个值,这样每次得到的值都是不一样的,当for循环结束,即i=5时,不符合条件,直接退出循环,此时i=5不会被存储,即不会生成一个新的块级作用域,因此最终arr中的值是[0,1,2,3,4],arr[2]();返回值为2。

    2、var声明的变量是全局变量,最后访问的也都是全局变量,每一次for循环就会声明一次i,每执行一次for循环声明的变量i都会覆盖掉上一次for循环声明的变量i。所以当for循环执行完后,i=5也会存储在全局变量中,此时,arr[2]()访问的是全局变量i,因此使用var最终会输出5。

    希望可以帮到你,祝学习愉快!

    2022-06-20 11:20:16
  • 这是JavaScript版本的区别吗

    2022-06-20 16:44:54
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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