箭头函数简写为“参数→函数体”,核心差异在于this绑定:无this、不可构造、无arguments等;适用于回调固化this,不适用于对象方法。

箭头函数的简写很直观,核心是“参数 → 函数体”,而它和普通函数的关键差异几乎都源于 this 绑定方式的不同。
箭头函数怎么简写
简写不是为了炫技,而是让常见场景更干净:
- 无参:用空括号
() => console.log('hi') - 单个参数:括号可省,
x => x * 2等价于(x) => x * 2 - 多个参数:必须加括号,
(a, b) => a + b - 单表达式:自动隐式返回,
arr.map(x => x * 2)不用写return和大括号 - 多语句:必须用大括号,并显式
return,x => { const y = x + 1; return y * 2; }
箭头函数和普通函数的核心区别
所有差异基本由 this 的行为决定:
-
this 指向固定:箭头函数没有自己的
this,它直接取定义时外层作用域的this,且无法被call、apply、bind改变。普通函数的this是调用时决定的,比如对象方法调用时指向该对象,单独调用时可能指向全局或undefined -
不能当构造函数:箭头函数没有
[[Construct]]内部方法,执行new fn()会直接报错fn is not a constructor;普通函数可以配合new创建实例,支持原型链 -
没有 arguments、super、new.target:箭头函数访问不到
arguments类数组,也不能用super调父类方法或new.target判断是否被new调用;需要用剩余参数...args替代arguments -
没有 prototype 属性:因此不能用于继承体系,也无法通过修改
prototype添加共享方法
什么时候该用箭头函数
适合那些需要“固化上下文”的场景:
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
立即学习“Java免费学习笔记(深入)”;
- 定时器回调:
setTimeout(() => this.doSomething(), 100),避免this丢失 - 事件监听:
btn.addEventListener('click', () => this.handleClick()) - Promises 链式调用:
.then(data => this.process(data)) - 数组方法中的回调:
arr.map(item => item.id)
不适合在对象字面量中直接定义方法(如 obj = { method: () => {} }),因为这时 this 不会指向 obj,而应改用简写语法 method() { } 或普通函数表达式。
一个容易踩坑的例子
看这段代码:
const obj = {
name: 'Alice',
regular() { return this.name }, // ✅ this 指向 obj
arrow: () => this.name // ❌ this 指向外层(通常是 global 或 module)
};
obj.regular(); // 'Alice'
obj.arrow(); // undefined(或全局 name,取决于环境)问题不在语法,而在语义:箭头函数的设计初衷不是替代对象方法,而是解决回调中 this 失控的问题。

















