【问】箭头函数和非箭头函数区别是什么?箭头函数函数是基于原型链的吗?
【答】箭头函数是ES6中新的函数写法,和非箭头函数相比,有如下特点:
- 它是匿名函数,不能使用new作为构造函数;
- 它的this永远继承自自身作用域链的上一层this
- 不绑定arguments, 使用…rest解决
- 没有原型属性prototype,所以不是基于原型链的
【延伸】
为了能深入了解差别,对比下非箭头函数的this:
- this指向它的调用者,即this指向是由执行时还不是定义时决定
- 如果该函数是构造函数,则this指向一个新对象
- 如果该函数是一个对象的方法,则this指向这个对象
- 可以通过call、apply等方法修改执行时的this指向
【测试】
- new测试
- this指向测试
- 测试arguments
- 测试原型属性