ES6 (一) ---let/const

1.let

(1) 基本用法

用于声明变量,且声明的变量只在let所在的代码块内有效

(2) let为js新增块级作用域

(3) 不存在变量提升,不能在同一个作用域内重复声明

(4) 在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporal dead zone,简称 TDZ)。

(5)函数声明

es5规定,函数声明只能在*作用域和函数作用域中声明: 

ES6 (一) ---let/const

以上这两种情况都是不合法的。

但是es6引入了块级作用域,允许在块级作用域中声明函数,且只在当前作用域内有效,类似用let声明,作用域外不可访问

具体参照:http://es6.ruanyifeng.com/#docs/let

2.const

const声明一个常量并且必须立即初始化,不可更改,同一作用域内不可重复声明,不会变量提升,存在暂时性死区

备注:

const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址所保存的数据不得改动。对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。但对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指向实际数据的指针,const只能保证这个指针是固定的(即总是指向另一个固定的地址),至于它指向的数据结构是不是可变的,就完全不能控制了。因此,将一个对象声明为常量必须非常小心。

因此声明一个const对象后,可以为其增加属性,但是不能将其指向另一个地址

ES6 (一) ---let/const