箭头函数
箭头函数表达式的语法比函数表达式更简洁,并且没有自己的this,arguments,super或new.target。箭头函数表达式更适用于那些本来需要匿名函数的地方,并且它不能用作构造函数。
箭头函数的语法是
(param1, param2, …, paramN) => { statements }
// 当函数体只有一句而且这一句就是返回值的时候,函数体的{}以及return关键字都可以省略
// 以下相当于:(param1, param2, …, paramN) =>{ return expression; }
(param1, param2, …, paramN) => expression
// 但是如果返回值是对象,则要像下面这么写
params => ({foo: bar})
// 当只有一个参数时,圆括号是可选的:
(singleParam) => { statements }
singleParam => { statements }
// 没有参数的函数应该写成一对圆括号。
() => { statements }
箭头函数不会创建自己的this,它只会从自己的作用域链的上一层继承this。因此,在下面的代码中,传递给setInterval的函数内的this与封闭函数中的this值相同
下面我们来看一个例子:
// 使用箭头函数前
function Person () {
this.age = 0
var _this = this
setInterval(function () {
// 这里this指向window,所以我们用_this
_this.age++
}, 1000)
}
var p = new Person()
// 使用箭头函数
function Person () {
this.age = 0
setInterval(() => {
this.age++; // |this| 正确地指向 p 实例
}, 1000)
}
var p = new Person()
在项目当中,箭头函数使用非常广泛,因为箭头函数非常简洁,而且没有自己的this,他的this指向外层
1、如果希望this指向内层,就用普通函数
2、如果希望this指向外层,就用箭头函数
3、如果两层this都需要,那就用普通函数并且在外层 var _this = this
解构赋值
ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring)
以前,要把数组中的值提取出来,得这么写
var arr = [2, 5, 7]
var a = arr[0], b = arr[1], c = arr[2]
ES6可以这么写
var arr = [2, 5, 7]
var [a, b, c] = arr
上面代码表示,可以从数组中提取值,按照对应位置,对变量赋值。
如果解构不成功,变量的值就等于undefined
var arr = [2, 5]
var [a, b, c] = arr
这样的话c就是undefined
但是,也可以给默认值
var arr = [2, 5]
var [a, b, c = 1] = arr
当c可以被解构的时候就等于解构出来的值,没有的话c的值就默认为1
对象也是可以解构赋值的。
但是对象的解构赋值跟数组是有区别的,数组是按顺序解构,对象是按属性名解构,也就是说定义的变量名对应对象的属性名
var person = {
username: 'Www',
age: 26,
gender: 'male'
}
var { username, gender, age } = person
同样的,如果结构失败会得到undefined,同时也可以给默认值
var person = {
username: 'Www',
age: 26,
gender: 'male'
}
var { username, gender, age, height } = person // 这样写 height 就是 undefined
var { username, gender, age, height = 180 } = person // 这样写 sex 就是 180
而且解构赋值还可以嵌套使用
ar person = {
username: 'Www,
age: 26,
gender: 'male',
likes: ['写博客', '敲代码']
}
var { likes: [ like1 ]} = person
console.log(like1) // 写博客