为什么引入箭头函数
一句话总结:消除函数二义性
函数的二义性
在支持面向对象的编程语言中,函数往往有两个层面的含义
- 指令序列
- 创建实例
通常情况下,编程语言应该在语法层面针对函数的两种含义进行区分
但在 js 设计之初并没有进行区分,这也是 js 的其中一个设计缺陷,导致了JS 中的函数具有二义性
虽然社区提出了「构造函数首字母大写」等解决方案,但治标不治本
拿到一个函数却不知道如何使用,这对于开发造成了一定的心智负担
消除函数二义性
ES6 通过引入箭头函数(指令序列)和 class(创建实例)来解决这个问题
class 不仅方便开发人员进行面向对象编程,更重要的是消除了函数的二义性
class 声明的方法,直接调用会报错;同样的,使用 new
关键字来调用箭头函数,同样会报错
这也就回答了为什么箭头函数没有
this / prototype
- 因为
this
是面向对象中的概念,prototype
是实现面向对象的手段。而箭头函数代表的是指令序列,与面向对象无关,不需要创建实例