箭头函数和普通函数的区别

说到箭头函数大家一定很熟悉了,可能在项目中会经常用到,而且在面试中问到的概率也很大,今天我也查阅了相关资料,就我这边对箭头函数的理解简单总结一下吧。
首先要知道什么是箭头函数,箭头函数就是没有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关键字,也不能换行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值