首页 > 代码库 > ECMAScript6学习笔记
ECMAScript6学习笔记
一. 声明变量let和const
1. let的特点:
(1)不存在变量提升
(2)暂存性死区:let声明的变量被绑定到该区域,不再受外部影响。
(3)同一个作用域中,不允许重复声明
2. 块级作用域(使用let声明变量)
(1)以前只有全局作用域和函数作用域,es6中一个代码块就是一个作用域{}
(2)允许块级作用域互相嵌套,外层作用域无法读取内层作用域的变量,内层作用域可以定义外层作用域的同名变量。
(3)ES5规定函数只在全局作用域和函数作用域中声明,不允许在块级作用域中声明。
但是,ES6引入块级作用域后,允许在块级作用域中声明函数,此时函数声明的语句类似于let,在块级作用域之外不可用。
PS:千万注意以下!!!
ES6 改变了块级作用域内声明的函数的处理规则,显然会对老代码产生很大影响。为了减轻因此产生的不兼容问题,ES6在附录B里面规定,浏览器的实现可以不遵守上面的规定,有自己的行为方式。
- 允许在块级作用域内声明函数。
- 函数声明类似于
var
,即会提升到全局作用域或函数作用域的头部。 - 同时,函数声明还会提升到所在的块级作用域的头部。
注意,上面三条规则只对 ES6 的浏览器实现有效,其他环境的实现不用遵守,还是将块级作用域的函数声明当作let
处理。
根据这三条规则,在浏览器的 ES6 环境中,块级作用域内声明的函数,行为类似于var
声明的变量。
考虑到环境导致的行为差异太大,应该避免在块级作用域内声明函数。如果确实需要,也应该写成函数表达式,而不是函数声明语句。
3. do表达式(只是一个提案)
块级作用域只是一个语句,将多个操作封装在一起,没有返回值。
提案的内容是在块级作用域之前加上do,使它变成do表达式,有返回值。
4. const命令:声明一个只读的常量,一旦声明,常量的值就不能改变。
专有特点:const声明后必须马上初始化,否则会报错。
与let的相同点:
1)只在声明所在的块级作用域内有效
2)不可重复声明
3)const声明的常量不提升,存在暂时性死区,绑定到该区域,只能在声明的位置后面使用。
总结:const实际上保证的并不是变量的值不得改动,而是变量指向的那个内存地址不得改动。
对于简单类型的数据,值就保存在变量指向的那个内存地址;对于复杂类型数据,变量指向的内存地址保存的是一个指针,只能保证该指针不会改变。
因此,const声明的数组可以为其添加子项;保存的对象,可以为其添加属性。
ECMAScript6学习笔记