javascript箭头函数是什么_它与普通函数有什么区别?

箭头函数是ES6引入的简洁函数语法,无this/arguments/super/new.target,不能作构造函数,适合简短回调但不适用需动态this或实例化的场景。

箭头函数是 ES6 引入的一种简洁的函数定义语法,它没有自己的 thisargumentssupernew.target,行为更轻量,也更适用于某些场景。

语法更简洁

箭头函数省略了 function 关键字和 return(单表达式时自动返回),写起来更紧凑:

  • 普通函数:const add = function(a, b) { return a + b; };
  • 箭头函数:const add = (a, b) => a + b;
  • 单参数可省括号:const square = x => x * x;
  • 无参需写空括号:const sayHi = () => "Hello";

this 绑定方式不同

普通函数的 this 取决于调用方式(谁调用,this 就是谁);箭头函数没有自己的 this,它会沿作用域链向上找外层最近的非箭头函数的 this 值,且无法通过 callapplybind 改变。

  • 这意味着在对象方法或事件回调中,用箭头函数容易“意外”保留定义时的 this,比如定时器里访问对象属性时可能出错。
  • 如果需要动态 this(如 Vue 方法、React 类组件事件处理),通常得用普通函数。

不能作为构造函数

箭头函数没有 prototype,也没有 [[Construct]] 内部方法,所以不能用 new 调用,否则会报错。

  • new (() => {}) // TypeError: is not a constructor
  • 需要实例化对象时,必须使用普通函数或 class。

没有 arguments 对象

箭头函数内部访问 arguments 会报错或取到外层函数的 arguments(如果存在)。替代方案是使用剩余参数 ...args

  • 普通函数:function sum() { return Array.from(arguments).reduce((a, b) => a + b); }
  • 箭头函数:const sum = (...args) => args.reduce((a, b) => a + b);

基本上就这些。箭头函数不是万能替代品,而是补充工具——适合简短逻辑、避免 this 混乱的回调,但不适合需要动态上下文或构造能力的场景。