(二) const的本质

2. const

const主要用于定义常量

// 对于基本类型
const p = 100
p = 200 // TypeError: Assignment to constant variable

// 对于引用类型
const obj = {name: '猫13'}
obj.name = '猫14'
console.log(obj)		// {name: "猫14"}
obj = {}	// TypeError: Assignment to constant variable

const定义常量的本质: 保证栈内存中的值不能被改变, 什么意思 ?

我们知道, 计算机是通过内存地址来查找内存空间的, 内存空间又分为 , 我们声明一个变量, 无论用何种方式, 变量名一定是存储在栈内存中, 并且指向该内存的内存地址, 也就是说, 变量名是对内存地址的一个引用

而当我们给一个变量赋值的时候, 这时候就要看这个值的具体类型了

  • 对于基本类型, 栈内存中保存的就是值本身, 如上图
  • 对于引用类型, 栈内存中保存的是该引用类型的引用 (是一个内存地址), 真正的值保存在堆内存中, 如下图

因此, 当我们用const声明一个变量并为其赋值一个基本类型时, 是不允许再改变的, 而当我们赋值一个引用类型时, 栈内存中保存的地址并没有改变, 改变的是堆内存中的东西

另外, 每当我们创建一个对象, 就会在堆中开辟一块空间, 因此当我们为执行 obj = {}时, 栈内存中保存的引用已经被改变了

posted @ 2021-07-30 08:08  只猫  阅读(91)  评论(0编辑  收藏  举报