这一个系列是ES6的全解析,不一定是完全的目录,希望记录一些自己的理解
ES5一共有两种变量的声明方法,即var和function;到了ES6这里,除了增加的常用的let和const之外,还添加了import和class命令。我们逐一来看:
var
这个想必大家都很清楚,也用的很多。var 是存在var变量不存在块级作用域,是函数作用域;可以多次重复声明同一变量,而且有变量提升的效果。
let
let 是ES6中新增的一种变量命名方式,其作用域也是ES6中特色的块级作用域,某种程度上来说,ES6相当于严格模式中的var,因此不存在变量提升的问题,例如在for循环中,就很适合let声明临时变量。let还有一个特性就是暂时性死区,当存在全局变量的时候,再去块级作用域中用let声明一个相同的变量就会存在暂时性死区。
const
const多用于声明只读的常量,且声明过后,常量的值不能改变;与let一样,只在块级作用域中生效,同样不存在变量提升;同样存在暂时性死区,且不可重复声明同一变量。慎用const声明对象
import
import同样也是ES6中新增的一种方式,不同的是用来处理模块化的函数以及对象,其本质是实现按需加载的思想。静态的import导入与另一个模块的导出绑定,导入的模块运行在严格模式下,且可以向后兼容。这对于项目的模块化,为整体代码缩水有很大的用处。import可以接收一个对象,用对象表示;具有变量提升的效果。
class
按照js中万物皆对象的思想,是不应该有类的这个东西的。但ES6为了更接近传统语言的写法,引入例如类(class)这个概念。class这个其实还是旧瓶装新酒,是为了让整体看起来更像面向对象的写法。有一点注意的是类的内部所定义的所有方法是不可枚举的,可以通过getter和setter访问属性。类不存在变量提升,在内部都是默认的严格模式,但是存在继承。后续会说,这里不多说
function
function声明主要是对函数的管理;在ES6中,声明函数时可以使用默认参数,声明后的默认参数不能用let、const进行二次声明。同样是不能有同名参数,不具有传值的功效;设置完默认参数就会形成函数作用域;这些都是常用的特性,ES6中引入了rest参数(形式为“...变量名”),用于获取函数的其余参数,与其搭配的通常是数组;第二个新特性是扩展运算符(spread)是三个点(...)。这相当于rest参数的逆运算,将一个数组转为用逗号分隔的参数序列,该运算符主要用于函数调用。第三个是判断函数的调用,第四个是比较常用的箭头函数。
最后总结一下,粗略的划分可以如下:let与var主要是针对变量作用,const多服务于常量,import则针对模块化处理,class侧重于伪类的抽象,function则坚守对函数的处理,按照js中万物皆对象,凡是皆可函数的思想,基本上相对于ES5来说,ES6对变量命名的方式做了进一步的细化,可能ES7还会进一步抽象,这里先不表,待看了ES7再回来说