前端面试:箭头函数和普通函数的区别?

247 阅读2分钟

箭头函数和普通函数在 JavaScript 中有一些区别,主要涉及到函数的语法、作用域和 this 的处理方式等。

1. 语法:

  • 箭头函数使用箭头符号 => 来定义,例如:(param1, param2) => expression
  • 普通函数使用关键字 function 来定义,例如:function functionName(param1, param2) { ... }

2.作用域:

  • 箭头函数没有独立的作用域,它继承了外部函数的作用域。这意味着箭头函数内部没有自己的 thisarguments,它们会在函数定义时确定。
  • 普通函数有自己的作用域,thisarguments 是在函数调用时确定的。

3. this:

  • 在箭头函数中,this 指向箭头函数定义时所在的上下文,通常是包含箭头函数的最近的非箭头函数上下文。
  • 在普通函数中,this 的值是在函数被调用时确定的,可以根据函数的调用方式(作为方法、全局函数等)而改变。

4. 构造函数:

  • 箭头函数不能用作构造函数,不能通过 new 关键字实例化,也没有 prototype 属性。
  • 普通函数可以用作构造函数,可以通过 new 关键字创建实例,并且有自己的 prototype 属性。

5.递归:

  • 由于箭头函数没有自己的作用域,递归调用时会出现问题,容易导致堆栈溢出。
  • 普通函数可以正常递归调用,因为每次调用都会创建一个新的作用域。

6. 对象的方法:

  • 箭头函数不能用作对象的方法,因为它们没有自己的 this,无法正确绑定。
  • 普通函数可以作为对象的方法,并且在调用时会绑定到该对象上。

总的来说,箭头函数适用于简单的表达式或者需要继承上下文的情况,而普通函数更灵活,适用于需要独立作用域、自定义 thisarguments 的场景