为什么在第一个for里面定义的var a=2,可以在第二个for里面调用输出呢??

为什么在第一个for里面定义的var a=2,可以在第二个for里面调用输出呢??

# 具体遇到的问题

<script>

//for与let形成块级作用域

    forlet i = 0i < 3i++){

    if(i == 2){

      console.log(a);//undefined(变量提升,只提升变量的定义,并不提升变量的值)

      var a = 2;

    }

  }

    for (var i = 0i < 3i++) {

      if (i == 2) {

        console.log(a); //输出2

        // var a = 2;

      }

    }

  </script>



正在回答

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

2回答

同学你好,虽然变量a是在块级作用域中声明的,但是使用的是var声明的,在其他地方是可以调用的。

第二个for循环中打印的a,就是在第一个for循环中定义的变量a的值。

祝学习愉快~

好帮手慕言 2020-10-31 15:40:44

同学你好,测试同学的代码,解答如下:

1、i是使用let声明的,i只能在for循环的{}中生效,在{}外侧打印i是会报错的。

2、而a是使用var声明的,在其他地方都是可以获取到变量a的。

  • 提问者 沐寒528 #1
    亲,我没有打印i啊,我是输出a的值。 在第一个for循环中形成三个块级作用域;在第二个for循环中,我把var = 2注释掉了,为什么还能输出a的值为2呢?
    2020-10-31 16:26:14
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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