箭头函数 vs 普通函数

1、this

  • 普通函数,this指向最后一次调用它的对象
  • 箭头函数,没有this,需要通过作用域链来确定this的指向,this绑定的是最近的一次定义的非箭头函数
let a = {
name: 'a',
fn: function () {
 setTimeout(function () {
   console.log('普通函数', this)
 }, 20)
 setTimeout(() => {
   console.log('箭头函数', this)
 }, 20)
}
}
a.fn() // 普通函数' this => window 箭头函数' this => a

2、arguments对象

  • 普通函数,arguments对象是所有参数的内容
  • 箭头函数,没有arguments对象,但可以访问到外围函数的 arguments 对象
function a(a1, a2) {
    console.log('a', arguments)
    b(a1)
    function b(a1) {
        console.log('b', arguments)
        setTimeout(() => {
            console.log('c', arguments)
        }, 10)
    }
}
a(1,2) // a=>[1,2] b=>[1] c=>[1]

3、通过new 关键字调用

  • 普通函数,可以通过new关键字的调用
  • 箭头函数,不可以通过new关键字的调用,不能作为构造函数调用

javascript函数有两个call和construct
当通过new调用函数时,先执行construct方法,创建实例对象,然后再执行函数体,将this绑定到实例对象上
直接调用函数时,直接执行call方法,执行函数体

箭头函数没有construct,不能被作为构造函数使用,如果通过new调用时候,会报错

3、没有原型(prototype) 没有super

箭头函数,不可以通过new关键字的调用,所以没有构建原型的需求,自然也就不存在protetype这个属性,也不能通过super访问原型的属性

你可能感兴趣的:(箭头函数 vs 普通函数)