0%

var、let、const 辨析

var

  1. 有变量提升
  2. 没有块的概念,可以跨块访问;作用域只存在于函数中,不可以跨函数访问
  3. 可以重复声明

let

  1. 有块级作用域
  2. let 也有变量提升,但是 var 声明的变量会被赋值 undefined,let 和 const 声明的变量不会被初始化
  3. 存在暂时性死区。在块级作用域内,let 声明之前的部分被称为暂时性死区,暂时性死区内不可以使用 let 声明的变量
  4. 不允许重复声明
  5. let 不会在全局声明时创建 window 对象的属性

const

  1. 具备 let 所具有的上述特性
  2. 一旦声明必须立即赋值
  3. 声明之后值不可以改变。(对于引用类型的变量而言,指的是它的地址不能发生改变)

Object.freeze()

既然 const 对于引用类型只能确保地址不变,那么怎样才能使得声明的引用类型变量上的值无法改变呢?
这里我们可以使用 Object.freeze() 方法递归解决

1
2
3
4
5
6
7
8
const myFreeze = obj => {
Object.freeze(obj);
Object.keys(obj).forEach(key => {
if(typeof obj[key] === 'object') {
myFreeze(obj[key]);
}
})
}

本文标题:var、let、const 辨析

文章作者:Flower-F

发布时间:2021年12月11日 - 19:26

最后更新:2022年01月19日 - 16:40

-------------本文结束,感谢您的阅读-------------

欢迎关注我的其它发布渠道