var、const、let三者的区别

1.基本使用区别

A.var和let用于声明变量,而const用于声明常量;

B.var声明的变量不存在块级作用域,在全部范围内都有效,(原因:会变量提升);而let和const声明的只能在块级区域内有效(例如"{","}"之间有效);

C.var存在变量提升,可以先使用后声明;而let和const只能先声明后使用;

D.var允许变量名重复,即可以多次重复声明;而let和const不可以;

E.const在声明变量时必须为其赋值,在声明之后不可改变;如果声明的是一个对象,则会存储引用地址,地址不会改变,但是地址中存储的对象可以。

2.部分举例

问题:使用var会造成变量穿透,如何解决

案例:

//输出十个 10
for (var i = 0; i < 10; i++) {
 setTimeout(function(){
    console.log("var====",num--,"--",i);
  })
}


// 输出0-9
for (let j = 0; j < 10; j++) {
  setTimeout(function(){
    console.log("let====",j);
  })

案例结果:

3.实现原理区别 

变量与内存之间,主要是三个名词:变量名,内存地址,内存空间

       JS引擎在读取变量时,先找到变量绑定的内存地址,然后找到地址所指向的内存空间,最后读取内容。

        当变量改变时,JS引擎不会使用新值覆盖之前旧值的内存空间(虽然在代码角度,看上去是覆盖的),而是重新分配一个新的内存空间来存储新值,并将新的内存地址与变量进行绑定,JS引擎会在合适的时候进行GC,回收旧的内存空间。

        const定义变量(常量)之后,变量名与内存地址之间就已经建立了不可变的绑定关系,阻隔变量地址被改变,当const定义的变量重新赋值时,JS引擎会尝试分配新的内存空间,所以会被拒绝,抛出异常。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值