Es6语法----声明
Es6 在 Es5 的基础上,新增了4种 声明方式,一共有6种:
1. var 2.function 3.let 4.const 5.import 6.class
今天学习了 Let 和 const ,后续会补充其余新增的2种;
Let(变量声明):
1. 块级作用域: let 声明的变量只有自己所在的 作用域 能够获取和调用;
2. 关闭了 变量提升, 使代码运行更合理
3. 暂时性死区: 在let作用域内,let的所有变量获取和调用必须在,let声明之后才可以获取和调用;
4.不允许重复声明
Const(常量声明):
1. 块级作用域: const 声明的变量只有自己所在的 作用域 能够获取和调用;
2. 关闭了 变量提升, 使代码运行更合理
3. 暂时性死区: 在const作用域内,const的所有变量获取和调用必须在,const声明之后才可以获取和调用;
4.不允许重复声明
5.const声明的常量不能更改(地址);
本质: const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址不得改动。
例如:
const obj = {};
obj.name = "Sujz"; // 新增属性成功
obj = {}; // 报错 (因为,改变了 地址 )
如果想将对象冻结(即,不能新增属性):
const foo = Object.freeze({});
foo.prop = 123; // 常规模式,这行不起作用,即 无法改变 foo 的值,也无法新增 foo 的属性,并且,在严格模式下,还会报错;
除了冻结对象本身,对象的属性也该冻结:
var constantize = (obj) => {
Object.freeze(obj);
Object.keys(obj).forEach( (key, i) => {
if ( typeof obj[key] === 'object' ) {
constantize( obj[key] );
}
});
};