Skip to content

箭头函数(Arrow Function)是ES6(ECMAScript 2015)中引入的一种新的函数定义方式。箭头函数提供了一种更简洁的函数书写方法,并且它不绑定自己的thisargumentssupernew.target

普通函数和箭头函数的区别 重点

  • 箭头函数的 this 指向规则(没有 this)
  • 箭头函数的 arguments(没有 arguments)
  • 使用 new 调用箭头函数会报错,即,不能作为构造函数
  • 箭头函数不支持 new.target
  • 箭头函数没有原型
  • 箭头函数没有 super
  • 箭头函数不支持重命名函数参数,普通函数的函数参数支持重命名
  • 箭头函数不可以使用 yield 命令,因此箭头函数不能用作 Generator 函数。
  • 箭头函数不能直接用 call()、apply()、bind() 这些方法去改变 this 的指向,但可以间接改变

箭头函数与非箭头函数的区别

  1. 箭头函数本身没有 this。所以需要通过查找作用域链来确定 this 的值。this 绑定的就是最近一层非箭头函数的 this。箭头函数外层如果没有非箭头函数,严格模式和非严格模式下它的 this 都会指向 window(全局对象)。不可以直接修改箭头函数的 this 指向。
  2. 箭头函数本身没有 argument。可以通过扩展符代替 argument 获取函数的多余参数。箭头函数的 this 指向普通函数时,它的 argumens 继承于该普通函数。如果箭头函数的 this 指向 window(全局对象)使用 arguments 会报错,未声明 arguments。
  3. 箭头函数不能通过 new 调用。箭头函数不可以当作构造函数,也就是说,不可以使用 new 命令,否则会抛出一个错误。
  4. 箭头函数不支持 new.target。new.target 会返回该函数的引用。此属性主要用于确定构造函数是否为 new 调用的。箭头函数的 this 指向普通函数时,它的 new.target 就是指向该普通函数的引用。箭头函数的 this 指向全局对象时,在箭头函数中使用 new.target 会报错。
  5. 箭头函数没有原型。由于不能使用 new 调用箭头函数,所以也没有构建原型的需求,于是箭头函数也不存在 prototype 这个属性。
  6. 箭头函数不支持 super。连原型都没有,自然也不能通过 super 来访问原型的属性,所以箭头函数也是没有 super 。
  7. 箭头函数不支持重命名函数参数,普通函数的函数参数支持重命名
  8. 箭头函数不可以使用 yield 命令,因此箭头函数不能用作 Generator 函数。