一、ES6新增特性 let 和const

1、let命令

let与Var区别:

  • let用户声明变量,但只在所在的代码块内生效,在for循环中使用很是合适;var命名在全部范围内都生效

  • let不存在变量升级,若在变量声明之前使用会抛出错误;var存在变量升级,即,变量可以在声明之前使用,值为undefined;

  • let在同一个作用域内不允许重复声明;

暂时性死区”(temporal dead zone,简称 TDZ):在代码块内,使用let命令声明变量之前,该变量都是不可用的。
ES6 的块级作用域必须有大括号,如果没有大括号,JavaScript 引擎就认为不存在块级作用域。

2、const 命令

const声明一个只读的常量。一旦声明,常量的值就不能改变,因此必须立即初始化,不能后续赋值,若只声明不赋值,则会报错。
const只在声明所在的块级作用域内有效,不存在提升,存在暂时性死区。

const本质:
即变量指向的那个内存地址所保存的数据不得改动,而不是变量的值i不可改变。

  • 简单类型的数据(数值、字符串、布尔值):其值保存在变量指向的那个内存地址,所以不可改变,即为常量;
  • 符合类型数据(对象、数组):其变量指向的内存地址,保存是一个指向实际数据的指针,const只能确保总是指向另一个地址,无法控制另一个地址的数据结构、值不改变,所以无法保证是一个常量;

若想要见一个对象变为常量,则需冻结,使用Object.freeze方法。

将一个对象彻底冻结方法:
var constantize = (obj) => {
Object.freeze(obj);
Object.keys(obj).forEach( (key, i) => {
if ( typeof obj[key] === 'object' ) {
constantize( obj[key] );
}
});
};

你可能感兴趣的:(一、ES6新增特性 let 和const)