- 不属于顶层对象
window
- 存在块级作用域
- 存在暂时性死区
- 不存在变量提升
- 不可以重复声明
- 定义的值不能被修改 ```javascript const a = 1 a = 2 // error
console.log(b) // error const b = 3;
if (true) { console.log(b); // error const b = 1; }
if (true) { const a = 1; } console.log(a) // error
js中定义的基本数据类型的值都被存储在栈内存中,引用数据类型的值保存在堆内存中,其中在栈内存中的引用类型变量指向堆内存中的引用类型的值(栈中存储的是地址)<br />
由const定义的变量,普通类型的变量的值无法直接更改,引用类型的存储引用地址无法更改(在栈内存中),但是存储在堆内存中的值可以更改。
令引用类型的变量值(堆内存中的值)无法更改:<br />使用`Object.freeze(a);`可以实现冻结引用类型的变量,单层冻结。<br />如要实现多层冻结,需要手动递归冻结内部对象。
```javascript
const a = {
name: 'zza',
age: 12,
skills: {
name: 'code'
}
}
console.log(a)
Object.freeze(a);
Object.freeze(a.skills);
a.name = 'zzazza'
a.skills.number = 12
console.log(a)
分析:在实际的项目开发中,应该尽量少的使用var,使用const、let将其代替。