箭头函数和普通函数的区别?

73 阅读2分钟

区别:

  • 箭头函数没有自己的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