const 不得不说的关键点
- const 声明的变量不得改变值(也就意味着一旦声明变量,就必须立即初始化)
- 只在声明的作用域内有效
- 不存在变量提升
- 存在暂时性死区,只能在声明的位置后面使用
//1.1 const 声明的变量必须先初始化
const a ; //报错:Uncaught SyntaxError: Missing initializer in const declaration
//1.2 const 声明的变量不得改变值
const a = {};
a.name = 'zhangsan';
console.log(a); // {name : 'zhangsan'}
a = {age : 18}; //报错:Uncaught TypeError: Assignment to constant variable
//2.1 只在声明的作用域内有效
function f(){
const a = 12;
(function ff(){
const a = 'abc';
console.log(a + '...');// 'abc...'
})();
console.log(a); //12
}
f();
//2.2 如果我把上述的例子小小的改动一下
function f(){
const a = 12;
(function ff(){
a = 'abc'; //报错:Uncaught TypeError: Assignment to constant variable
console.log(a + '...');
})();
console.log(a);
}
f();
//3.不存在变量提升
console.log(a); //报错:Uncaught ReferenceError: a is not defined
const a = 123;
本质: const 实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址不得改动,对于简单类型(Number、String、Boolean)的数据,值就保存在变量指向的那个内存地址,但对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指针,const只能保证这个指针是固定的,至于它指向的数据结构是不是可变的,就完全不能控制了