为什么创建了箭头函数?
为了消除函数的二义性
- function可以用来创建一个构造函数
function Person(name) {
this.name = name
}
const p = new Person("lisa")
- function用来创建普通的执行函数(指令序列)
function a(){}
function b(){}
function c(){}
function handle() {
a()
b()
c()
}
一般地,规定大驼峰命名的是构造函数,小驼峰的是普通的执行函数。但是仅仅依靠代码规范区分是不可靠的,这就使得再看一些复杂的不规范的代码的时候使开发者不知道该如何使用某个函数。为了解决这个问题,es6时加了class和箭头函数分化function的两个功能。
箭头函数只用来创建普通的执行函数实现来实现某些功能和面向对象没有关系!!!
根据这个结论,我们列出箭头函数与普通函数的区别:
- 没有自己的this指向,只会在定义时捕获外层的this,并继承。 -> 因为箭头函数没有构造函数的功能所以不需要自身的this指向;
- call, apply, bind方法不能更改箭头函数的this指向。 -> 有第一点可知,箭头函数都没有自己的this,更不能改变了;
- 箭头函数没有原型 -> 箭头函数跟构造函数以及面向对象没有关系,所以不需要原型;
- 箭头函数不能用做构造函数。
其他区别
- 箭头函数没有arguments对象;
- 箭头函数不能用作Generator函数,不能使用 yeild 关键字。