老师,为什么使用let定义循环变量就会创建三个块级作用域呢?

老师,为什么使用let定义循环变量就会创建三个块级作用域呢?

相关截图:

http://img1.sycdn.imooc.com//climg/60d2ce130940bca620941156.jpg

问题描述:

for不是只在循环前定义一次变量,后面每次循环只是重新对 i 赋值吗?

为什么会创建三个块级作用域,而不是共用最后i=3时的同一个作用域呢?

正在回答

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

1回答

同学你好,当let和for循环一起使用时,for循环几次就会形成几个块级作用域,因为在每一次for循环中变量i都是重新声明。当执行第一次for循环时,会形成一个块级作用域,此时块级作用域中的变量i是不能在当前块级作用域之外访问的,当执行第二次for循环时,不能访问第一次for循环形成的块级作用域中的变量i,此时重新使用let声明变量i,形成新的作用域,依次类推。

祝学习愉快!

  • __Promise 提问者 #1

    老师,你这么说我就明白了,相当于每次循环都重新用let声明了i形成了新的独立作用域.

    但是为什么下一次循环能记住上次循环的值呢?

    2021-06-23 15:11:48
  • 好帮手慕然然 回复 提问者 __Promise #2

    同学你好,可以参考以下思路来理解:当执行for循环代码时,首先会执行let i = 0,此时会形成一个最大的块级作用域。然后执行i<btns.length判断语句,此时也会形成一个块级作用域(此处相当于if),在此块级作用域中会重新声明i并赋值,此时i赋值为外部i的值。当满足判断条件,执行完循环体之后,接着外部的变量i会执行i++语句,然后再次执行i<btns.length判断语句,形成一个新的块级作用域,并重新声明i并赋值为外部i的值,以此类推,如图

    http://img1.sycdn.imooc.com//climg/60d300bf09b3e74308750523.jpg

    祝学习愉快!

    2021-06-23 17:38:03
  • __Promise 提问者 回复 好帮手慕然然 #3

    谢谢老师,讲的太棒了

    2021-06-23 17:40:08
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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