首先说一下语法
function show(){
console.log(123);
}
这是es5的写法,变成箭头函数长这样.
let show ()=>{
console.log(123);
}
如果仅仅需要返回值的话,还有这种更快捷的方式
function show(){
return 1;
}
等同于let show ()=> 1;
写法变了自然会有所区别的,首先
1 在箭头函数中没有arguments,但是我们可以用‘...’代替,...的作用就是将参数整合成数组,当然还可以反着来,将数组打散变成参数。
2 箭头函数不能作为构造函数。
3 this指向问题,在es5中,this的指向是很复杂的,写一个this,如果没有被调用的话,那在牛逼的大牛也不知道这个this指向的是谁,但是在es6的箭头函数中,this指向的是定义函数所在的对象,例如
var a = 5;var obj = {
a : 12,
show : function(){
var a = 11;
setTimeout(function(){
console.log(this.a) //5
},1000)
}
};
obj.show(); //12 5
谁调用即指向谁,obj对象调用,this指向的就是obj,window调用this指向的就是window(注意:定时器调用无论写在哪个函数里面,都属于window调用.)
这是es5里面this指向的情况,如果对es5中的this指向不清楚的话,推荐阅读我的this指向规律,里面有很详细的介绍。
而箭头函数的this却有所不同了。
var a = 5;
var obj = {
a : 12,
show : function(){
var a = 10
console.log(this.a)
setTimeout(()=>{
console.log(this.a)
},100)
}
};
obj.show(); //12 12
第一个打印12很好理解,因为是obj调用的,但是第二个为什么也会打印12,而不是5或者10呢。
这个也就是箭头函数的第三个特性了,this指向的是函数被定义的对象。