ES6是JavaScript在ES5基础上更新迭代的版本,主要有以下几个方面:
ES6变量定义
es6声明变量的关键字不再局限于var,而是出现新的关键字let和const
关于let
let定义的变量不会被程序预解析,通过let定义的变量与循环遍历forEach中声明的变量相似,每次执行都是定义一个新的变量,相互之间不影响。如果let声明在{}内,只能在大括号内部进行调用,在外部无法调用。
关于const
在JavaScript中往往,把const定义的变量,称为常量。const定义在{}中,不能在{}外调用,一般使用 const 定义 对象,数组,函数,引用数据类型,const中存储的是引用数据类型的地址,只要地址不改变,可以改变数组,对象中的单元存储的数据。
由于let和var不会被预解析,那么定义不赋值情况下,会报错。
ES6箭头函数
箭头函数是ES6新增语法,在使用箭头函数时,省略声明关键字function,在原来小括号()和大括号{}之间添加 => 来指向程序内容。它是函数的另外一种语法形式,例如:
普通函数改为箭头函数
const fun1 = function(){} //普通函数
const fun2 = ()=>{} //箭头函数
有参数时候把参数写在小括号中。
ES6中函数的this指向问题
在ES6语法中,新增的箭头函数无法改变this指向。普通函数的指向问题大致为以下几个方面。
箭头函数的this指向:
在箭头函数中,this指向的是父级程序的this指向,
如果父级程序有this指向,那么箭头函数指向的就是父级程序的this,
如果父级程序没有this指向,那么指向的就是window
普通函数的this指向:
声明式,赋值式/匿名函数,对象中函数,绑定的事件处理函数
this都是指向的调用函数时,之前定义的内容
1),声明式指向的是window
2),匿名函数/赋值式指向的是window
3),forEach循环指向window
4),定时器,延时器指向window
5),定义在对象中的函数指向的是对象
6),绑定的事件处理函数指向的是绑定事件处理函数的标签
ES6中的自定义构造函数
ES6中,新增语法形式 class 类。只是语法格式和书写方式与ES5的不同。ES6中构造函数用class声明,参数的赋值写在constructor中。内部函数声明不再写入到构造函数的prototype中。例如
class Fun1{
constructor(name,age){
this.name = name;
this.age = age;
}
f1(){
console.log(this.name , this.age);
}
}