1.let
(1) 基本用法
用于声明变量,且声明的变量只在let所在的代码块内有效
(2) let为js新增块级作用域
(3) 不存在变量提升,不能在同一个作用域内重复声明
(4) 在代码块内,使用let
命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporal dead zone,简称 TDZ)。
(5)函数声明
es5规定,函数声明只能在顶级作用域和函数作用域中声明:
以上这两种情况都是不合法的。
但是es6引入了块级作用域,允许在块级作用域中声明函数,且只在当前作用域内有效,类似用let声明,作用域外不可访问
具体参照:http://es6.ruanyifeng.com/#docs/let
2.const
const声明一个常量并且必须立即初始化,不可更改,同一作用域内不可重复声明,不会变量提升,存在暂时性死区
备注:
const
实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址所保存的数据不得改动。对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。但对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指向实际数据的指针,const
只能保证这个指针是固定的(即总是指向另一个固定的地址),至于它指向的数据结构是不是可变的,就完全不能控制了。因此,将一个对象声明为常量必须非常小心。
因此声明一个const对象后,可以为其增加属性,但是不能将其指向另一个地址