javascript箭头函数是什么_与普通函数有何不同

箭头函数是ES6引入的简洁函数语法,无自身this/arguments/super/new.target,词法绑定this,不可用作构造函数或生成器,适用于简短回调等场景。

箭头函数是 ES6 引入的一种简洁的函数定义语法,它没有自己的 thisargumentssupernew.target,而是继承自外层作用域。这使得它在某些场景下更轻量,但也带来关键行为差异。

语法更简短,省略 function 关键字和 return(单表达式时)

箭头函数用 => 定义,参数只有一个可省括号,函数体只有一条表达式可省大括号和 return

例如:

const add = (a, b) => a + b;
const sayHi = name => `Hello, ${name}`;
const empty = () => {};

this 绑定是词法的,不随调用方式改变

普通函数的 this 取决于**怎么被调用**(如对象方法、call/apply、事件回调等),而箭头函数的 this 始终等于**定义时所在上下文的 this**,无法通过 callapplybind 改变。

常见影响场景:

  • 对象方法中若用箭头函数,this 不指向该对象,而是外层作用域(常为 windowundefined
  • 事件监听器或定时器中,想访问类实例属性时,用箭头函数可避免手动绑定 this
  • 不能用作构造函数:调用 new fn() 会报错

没有 arguments 对象,也没有 new.target

箭头函数内部访问 arguments 会报错,应改用剩余参数 ...args;也无法通过 new.target 判断是否被 new 调用。

例如:

const sum = (...nums) => nums.reduce((a, b) => a + b, 0); // ✅ 正确
const bad = () => console.log(arguments); // ❌ 报错 ReferenceError

不能作为 Generator 函数,也不支持 yield

箭头函数不能加 * 声明,也不能在函数体内使用 yield。需要生成器功能,必须用传统 function* 语法。

总结:箭头函数适合写简短的回调、逻辑简单且无需动态 this 的场景;涉及对象方法、构造、需要 arguments 或生成器时,仍要用普通函数。