ES6入门:3、const 命令
一、作用:
const 声明的变量,在声明初就必须赋值好,并且一旦声明后,这个变量的值就不能改变,也就是该const 声明的就是常量;
const test; // Missing initializer in const declaration. const 初识话变量时未实例化值(未赋值)
const temp = '我是常量';
temp = '变化后'; // Assignment to constant variable. 报错原因为给常量赋值
console.info(temp);
二、const 的作用域:
const 的作用域 和 let 命令相同:只在声明所在的块级作用域内有效;
console.info(temp); // temp is not defined 证明存在块级区域
{
console.info(temp); // Cannot access 'temp' before initialization 证明存在暂时性死区
const temp = '我是常量';
console.info(temp); // 我是常量
}
console.info(temp); // temp is not defined 证明存在块级区域
三、const 的本质:
const 实际上保证的是,并不是声明变量的值不可以改动,而是该变量指向的那个内存地址所保存的数据不得改动;
- 对于基础类型的数据(数值,字符串,布尔值等),值就保存在变量指向的那个内存地址,因此等同于常量;
- 对于引用类型的数据(主要是对象和数组等),变量指向的内存地址,保存的只是一个指向实际数据的指针,const 只保证这个指针是固定的(即总是指向另一个固定的地址),至于它指向的数据结构是不是可变的,就完全不能控制了,因此,讲一个对象声明为常量时必须非常小心;
// 基础数据类型
let text = '2';
const temp = text;
console.info(temp); // 2
text = '3';
console.info(temp); // 2 说明对于基础数据类型,const在声明变量时,就已经对该变量指向保存该值的内存地址,指向不会因为中间变量的变化而变化
console.info(text); // 3
// 引用数据类型
let yy = {};
const temp = yy;
console.info(temp); // {}
yy.a = 10;
yy.b = 'ce';
// 说明对于引用类型的变量,const 变量值保存指向该指向实际数据的指针,保证该指针是固定的,至于指向的数据结构是不是可变的,就不能控制了
console.info(temp); // {a: 10, b: 'ce'}
temp = {c : '赋值另一个对象'}; // Assignment to constant variable.
浙公网安备 33010602011771号