箭头函数(Arrow Function)是ES6(ECMAScript 2015)中引入的一种新的函数定义方式。箭头函数提供了一种更简洁的函数书写方法,并且它不绑定自己的this
、arguments
、super
或new.target
。
普通函数和箭头函数的区别 重点
- 箭头函数的 this 指向规则(没有 this)
- 箭头函数的 arguments(没有 arguments)
- 使用 new 调用箭头函数会报错,即,不能作为构造函数
- 箭头函数不支持 new.target
- 箭头函数没有原型
- 箭头函数没有 super
- 箭头函数不支持重命名函数参数,普通函数的函数参数支持重命名
- 箭头函数不可以使用 yield 命令,因此箭头函数不能用作 Generator 函数。
- 箭头函数不能直接用 call()、apply()、bind() 这些方法去改变 this 的指向,但可以间接改变
箭头函数与非箭头函数的区别
- 箭头函数本身没有 this。所以需要通过查找作用域链来确定 this 的值。this 绑定的就是最近一层非箭头函数的 this。箭头函数外层如果没有非箭头函数,严格模式和非严格模式下它的 this 都会指向 window(全局对象)。不可以直接修改箭头函数的 this 指向。
- 箭头函数本身没有 argument。可以通过扩展符代替 argument 获取函数的多余参数。箭头函数的 this 指向普通函数时,它的 argumens 继承于该普通函数。如果箭头函数的 this 指向 window(全局对象)使用 arguments 会报错,未声明 arguments。
- 箭头函数不能通过 new 调用。箭头函数不可以当作构造函数,也就是说,不可以使用 new 命令,否则会抛出一个错误。
- 箭头函数不支持 new.target。new.target 会返回该函数的引用。此属性主要用于确定构造函数是否为 new 调用的。箭头函数的 this 指向普通函数时,它的
new.target
就是指向该普通函数的引用。箭头函数的 this 指向全局对象时,在箭头函数中使用new.target
会报错。- 箭头函数没有原型。由于不能使用 new 调用箭头函数,所以也没有构建原型的需求,于是箭头函数也不存在 prototype 这个属性。
- 箭头函数不支持 super。连原型都没有,自然也不能通过 super 来访问原型的属性,所以箭头函数也是没有 super 。
- 箭头函数不支持重命名函数参数,普通函数的函数参数支持重命名
- 箭头函数不可以使用 yield 命令,因此箭头函数不能用作 Generator 函数。