箭头函数是ES6引入的简洁函数写法,不绑定自身this而继承外层词法作用域的this,支持参数、花括号和return的多种省略形式,但不能用作构造函数、无arguments和prototype,适用于回调等场景,慎用于对象方法或需动态this的场合。

箭头函数是ES6引入的简洁函数写法,它不仅简化了语法,更重要的是彻底改变了this的绑定方式——不绑定自己的this,而是继承外层作用域的this。
常见语法缩写形式
箭头函数支持多种省略写法,核心规则是:参数、花括号、return关键字在满足条件时可省略。
- 单个参数可省括号:
x => x * 2 - 无参或多个参数必须加括号:
() => 42或(a, b) => a + b - 函数体为单表达式且需返回值,可省花括号和
return:n => n ** 2 - 函数体含多语句或需显式返回对象字面量,必须加花括号和
return:() => { return { name: 'Alice' }; }(注意:若直接写() => { name: 'Alice' },花括号会被解析为代码块,而非对象,此时需用小括号包裹:() => ({ name: 'Alice' }))
this 指向固定,不受调用方式影响
普通函数的this取决于调用位置(如obj.method()中this指向obj),而箭头函数没有自己的this,它会沿作用域链向上查找,使用定义时所在词法环境中的this值。
- 在对象方法中使用箭头函数,
this不会指向该对象,而是指向外层(如全局或构造函数实例) - 在事件监听器或定时器中,避免
this丢失问题:用箭头函数自动捕获定义时的this,无需再写bind(this)或缓存const self = this - 不能用
call、apply、bind改变箭头函数的this——它们会被忽略
不能作为构造函数,也没有arguments
箭头函数没有[[Construct]]内部方法,因此不能用new调用,否则报错TypeError: xxx is not a constructor。
立即学习“Java免费学习笔记(深入)”;
- 没有
arguments对象,需用剩余参数...args替代 - 没有
prototype属性(不可被继承) - 没有
super或new.target(不能用于类方法或需检测构造调用的场景)
适用与慎用场景
适合用于简短回调、闭包内保持上下文、工具函数等;但不适合需要动态this或作为构造器的场合。
- ✅ 推荐:数组遍历
[1,2,3].map(x => x * 2)、事件处理btn.addEventListener('click', () => this.handleClick()) - ❌ 避免:定义对象方法
obj = { method: () => this.val }(this通常不是obj)、需要new的工厂函数 - ⚠️ 注意:嵌套箭头函数会层层继承外层
this,逻辑过深时可能难以追踪,必要时可换为普通函数提升可读性










