箭头函数的意义
引言
不论是在面试题还是项目中,我们经常会接触到 箭头函数
。说起箭头函数,首先我们会想到的就是它与普通函数的区别,并且可以说上来很多,如this指向、 arguments对象、 ptototype属性…等;但是这只是一个普通问题, 如果问你为什么需要箭头函数,ES6为什么要推出箭头函数,箭头函数的意义?我们该如何回答。
其实总结起来就是一句话:消除普通函数的二义性
函数的二义性
首先解释一下函数的二义性,即函数有两个作用:
1.指令序列
,也就是最常用的,执行一个函数方法,把这个函数内的指令从头到尾执行一遍
2.构造器
,即面向对象,可以用来创建一个实例
示例:
function a() {
?
}
调用1: a()
调用2: new a()
可以看到,在上述函数中,函数的二义性是让这个函数有了两种调用方法, 并且使用两种调用方式都不会报错。
因此在某些情况下我们会很困扰, 经常搞不懂这个函数到底是哪种含义:
const num1 = Number()
const num2 = new Number()
const date1 = Date()
const date2 = new Date()
消除二义性
因此ES6的推出解决了很多语言层面的缺陷,其中就包括二义性,下面看一下ES6是如何做的.
- class类。 使用class声明的类,只有上述的第二层含义(构造器),没有了指令序列的含义,所以只能使用new的方式来调用,否则会报错。
- 箭头函数。 当我们书写一个箭头函数的时候,只有上述的第一点含义(指令序列),没有了构造器的含义。所以不能使用new的方式来调用,否则会报错。