前言
箭头函数和function的区别是一个老生常谈的问题。追根求源,为什么需要箭头函数来与function做出区分呢? 难道就是因为箭头函数的写法更简洁?显然不是,本文与大家一起讨论一下。
function的二义性
function可以用来创建构造函数;也能用来创建普通的执行函数,用来处理特定的事件。一般命名方式为大驼峰的是构造函数;反之则是普通的执行函数。 但是仅仅依靠代码规范来区分是不可靠的;基于这个原因,es6新增了class 和 箭头函数来分化function的两个功能。 箭头函数仅用于创建普通的执行函数。
区别:
- 箭头函数没有自己的this指向;
- 箭头函数的this指向不可更改;
- 箭头函数没有原型。
因为箭头函数的功能就是创建普通的执行函数的,跟面向对象没有关系,所以
- 他不需要创建自身的this,所以它只能捕获定义时外层的this指向;并且继承;
- 那么基于第一点,因为this指向都是继承的那么就更加不能改了;
- 因为与面向对象没有任何关系,所以他也不需要原型(原型是实现面向对象的一种方式)
其他区别
- 写法更加简洁;函数仅有返回语句时可以省略大括号和return
const func = (name) => name
func("zhangsan") // "zhangsan"
- 箭头函数没有arguments参数对象;
- …