let var const 总结

本文详细对比了JavaScript中let、var和const三种变量声明方式的特点与区别,包括它们的作用域、变量提升特性及常量的不可变性,并提供了一个彻底冻结对象的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先总结下let/var/const三者的区别与联系

总结

1.let和var和const的区别

  • let没有变量提升(Hoisting),var有,所谓的变量提升即能否在声名变量前访问变量
  • let 有块级作用域,var没有,所以if for等块对var来说没有限制作用,对let有
  • 在全局作用域中let声明不会像var一样会在全局window对象中创建一个属性
  • let会有暂时性死区,只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响。
  • const的作用很多时候和let是一样的,但通过const声明的变量为基础数据类型时,它是不可变的(改变会报错),当它声明的变量为引用类型时,可以修改它的属性,如果要确保引用类型值的属性值不可变,请使用Object.freeze()冻结,但如果需要彻底冻结,还需要循环使用Object.freeze()

彻底冻结对象

<script>
      function myFreeze(obj) {
        Object.freeze(obj)
        Object.values(obj).forEach(item => {
            if(typeof item === 'object') {
                myFreeze(item)
            }
        })
      }
      const obj = {
          name: 'lf',
          ver: [1, 2, 3]
      }
      myFreeze(obj)
      obj.ver[0] = 0
  </script>

关于let暂时性死区

var tmp = 123;
if (true) {
  console.log(tmp) // ReferenceError: Cannot access 'tmp' before initialization
  let tmp = 456;
}

关于var变量提升/无视块级作用域

var name = 'lf';
      (function() {
        if(typeof name === 'undefined') {
            var name = 'stu'
            console.log(name)
        }else{
            console.log(name)
        }
      })()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值