ES6--let、const命令

 

1.let和const命令

        在之前JavaScript中我们是如何定义一个变量的:var

       比如定义一个Number类型的变量  var a=1

       同时如果我想修改a的值;可以直接再定义;var a=2;前面一个值就被覆盖掉了;

        

        在作用域中也提到过;var声明的是一个全局变量;

               比如

console.log(a);
var a=3;

        其输出的结果为:

        是因为var能够提前声明一个变量既是它将a提前声明;因为console时a还没有赋值所有是undefined类型 ;而不是报错;但可能在开发的时候存在问题;

        1.而用let和const声明的变量就没用类型提升了

console.log(a)
let a=5

        所以会报错而不是undefined类型!!

        2.let和const都是块作用域

之前在JavaScript初级中提到了两个作用域的概念:全局作用域和函数作用域

在函数作用域中的定义的var只能在函数中被调用出了函数就⑧行了;而全局作用域中的var 变量哪里都可以使用

这里提到的这两个东西都是块作用域,比如

 for(var a=0;a<1;a++){

          let b=3;

         

      }

      console.log(a)

      console.log(b)

因为var是提前声明的所以上文中的a直接跑到文档对前面提前声明了;但let却跑不出块无法声明在调用时找不到就报错了

                这里可以引入之前for循环的一个问题,在for循环中嵌套一个函数时可能存在的闭包问题

  for(var i=0;i<5;i++){
      arr[i]=function(){
          return i
      }
  }

                上面这个我们理想中其输出的是对应循环内的i值;可其输出的结果却是5;原因在于var提前声明了,其走完之后function才开始,var i跳脱出了块元素所以其执行完了才轮到function

这里用let就不会有问题了,因为let作用域只在块元素内,

        3.const

                和java中的const一样表示只能定义一次,如果再定义就会出错;

 

 const e=5
  var e=6

        4.不会污染全局变量

举个例子window的一个属性RegExp

var RegExp=10;
console.log(RegExp)
console.log(window.RegExp)

 

可以看到var改变了window中的RegExp的值 

               如果改成let

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值