ES6:const

const声明一个只读常量,一旦声明必须立即初始化,不能留到以后赋值。 同let存在块级作用域,const命令声明的常量也是不提升,同样存在暂时性死区,也与let一样不可重复声明 本质:const实际上保证的并不是变量的值不得改动,而是变量指向的那个内存地址不得改动。对于基本数据类型,值就保存在变量指向的那个内存地址,但是引用数据类型,变量指向的内存地址保存的只是一个指针,const只能保证这个指针是固定的。

const foo = {};

// 为 foo 添加一个属性,可以成功
foo.prop = 123;
foo.prop // 123

// 将 foo 指向另一个对象,就会报错
foo = {}; // TypeError: "foo" is read-only

如果真的不想改变对象本身需要使用Object.freeze方法

const foo = Object.freeze({});
// 常规模式时,下面一行不起作用;
// 严格模式时,该行会报错
foo.prop = 123;

将对象本身及其属性彻底冻结,使用递归方法实现

var fun = (obj) =>{
 		Object.freeze(obj);
 		Object.keys(obj).forEach((key)=>{
 			if(typeof obj[key] == 'object'){
 				fun(obj[key]);
 			}
 		});
 	};

猜你喜欢

转载自my.oschina.net/u/3787168/blog/1788869