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

箭头函数和普通函数是 JavaScript 中两种不同的函数定义方式,它们有以下的区别:

  • 语法不同:箭头函数使用箭头 => 来定义函数,而普通函数使用 function 关键字来定义函数。

  • 箭头函数没有自己的 this,它会继承其所在作用域的 this 值。而普通函数的 this 则由函数调用时的上下文所决定,可以通过 call、apply、bind 方法来改变。

  • 箭头函数没有自己的 arguments 对象,它可以通过 rest 参数语法来接收不定数量的参数。而普通函数则有自己的 arguments 对象,它可以接收任意数量的参数。

  • 箭头函数不能作为构造函数使用,不能使用 new 来实例化,因为它没有自己的 this,而普通函数可以用 new 来创建新的对象。

  • 箭头函数不能使用 yield 关键字来定义生成器函数,而普通函数可以。

  • 箭头函数不支持call()/apply()函数特性

  • 箭头函数没有prototype属性

  • 原型函数不能定义成箭头函数
    比如下面这个例子:

function Person(name){
  this.name = name
}

// 原型函数使用箭头函数,其中的this指向全局对象,而不会指向构造函数
// 因此访问不到构造函数本身,也就访问不到实例属性
Person.prototype.say = ()=>{console.log(this.name)}