区别:
- 箭头函数没有自己的this,它的this是继承来的,默认指向它定义时所在的对象,即
箭头函数中的this指向外层代码的this。 - 箭头函数不能作为构造函数(constructor) ,因此不能通过 new 来调用,所以箭头函数没有 new.target 属性。
- 箭头函数没有 argument 属性,可以通过剩余函数(...rest) 获取。
- 箭头函数不能直接使用 call、 apply、bind 来改变 this。
- 箭头函数不能使用 yieId,不能作为 gernerator 函数。
- 箭头函数语法比普通函数语法更加简洁,箭头符号(=>)。
扩展
call
「call()」 方法使用一个指定的 this 值和单独给出的一个或多个参数来调用一个函数。(来自MDN)
apply
「apply()」 方法调用一个具有给定this值的函数,以及以一个数组(或类数组对象)的形式提供的参数。(来自MDN)
bind
「bind()」 方法会创建一个新函数。当这个新函数被调用时,bind() 的第一个参数将作为它运行时的 this,之后的一序列参数将会在传递的实参前传入作为它的参数。(来自于 MDN )'
call, apply,bind的区别
call,apply,bind都可以用来改变this指向,但这三个函数稍稍有些不同。
- call与apply唯一的区别就是它们的传参方式不同,call从第二个参数开始都是传给函数的,apply只有两个参数,第二个参数是一个数组,传给函数的参数都写在这个数组里面
- call与apply改变了函数的this指向后会立即执行,而bind是改变函数的this指向并返回这个这个函数,不会立即执行
- call与apply的返回值是函数的执行结果,bind的返回值是改变了this指向的函数的拷贝
call,apply该用哪个?
- 参数数量,顺序确定就用call,参数数量,顺序不确定就用apply
- 参数数量少用call,参数数量多用apply
- 参数集合已经是一个数组的情况,最好用apply