说到箭头函数大家一定很熟悉了,可能在项目中会经常用到,而且在面试中问到的概率也很大,今天我也查阅了相关资料,就我这边对箭头函数的理解简单总结一下吧。
首先要知道什么是箭头函数,箭头函数就是没有function关键字,是一个类似箭头的函数,相当于匿名函数。
例如
var a=()=>{
return 1
}
相当于
function a() {
return 1
}
下面来看他们二者的区别
1、箭头函数作为匿名函数,是不能作为构造函数的,不能使用new关键字。
var A = () => {
return 1
}
var b = new A()//Uncaught TypeError: A is not a constructor
2、箭头函数不能绑定arguments,可以用rest参数…来解决。
function A(a) {
console.log(arguments)//[Arguments] { '0': 3 }
}
var B = (b) => {
console.log(arguments)// Uncaught ReferenceError: arguments is not defined
}
var C = (...c) => {
console.log(c)//[3]
}
A(3)
B(3)
C(3)
3、箭头函数会捕获其上下文的this值作为自己的this值
var obj = {
a: 10,
b: function() {
console.log(this.a)//10
},
c: function() {
return () => {
console.log(this.a)//10
}
}
}
obj.b()
obj.c()()
4、箭头函数当方法绑定的时候没有定义this绑定。
下面这个例子,b是一个箭头函数他的this指向的是window,为什么呢?首先该箭头函数的this捕获的是obj这个对象的环境,然而这个环境的this指向的是window,所以该箭头函数的this指向的是window。
var obj = {
a: 10,
b: () => {
console.log(this.a)//undefined
console.log(this)//window
}
}
obj.b()
5、箭头函数没有原型。
```javascript
var a = () => {
return 1
}
function b() {
return 1
}
console.log(a.prototype)//undefined
console.log(b.prototype)//b {}
6、箭头函数不能当作Generator函数,不能使用yield关键字,也不能换行。