首页 > 代码库 > 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学习笔记