ES6箭头函数用=>替代function,无this、arguments等,其this词法绑定于定义时外层作用域;基本语法为(参数)=>{函数体},支持无参、单参省括号、多参、单语句隐式返回等简写。

ES6 箭头函数写法简洁,核心是用 => 替代 function 关键字;它没有自己的 this,是因为设计上采用词法绑定——this 值在定义时就从外层作用域继承,而不是调用时动态确定。
箭头函数怎么书写
基本语法结构为:(参数) => { 函数体 },支持多种简写形式:
- 无参数: () => console.log('hello')
- 单个参数: num => num * 2(括号可省)
- 多个参数: (a, b) => a + b
- 单语句隐式返回: x => x.toUpperCase()(自动 return)
- 多语句需显式 return: (x, y) => { const sum = x + y; return sum * 2; }
为什么箭头函数没有自己的 this
这不是遗漏,而是明确的设计选择:箭头函数不创建独立的执行上下文,因此不绑定 this、arguments、super 或 new.target。
- 它的 this 直接取自定义时所在的词法作用域(即外层函数或全局环境的 this),也叫“词法 this”
- 普通函数的 this 在每次调用时才根据调用方式(如
obj.fn()、fn.call(obj))动态绑定;箭头函数跳过这一步,直接沿作用域链向上找 - 正因为 this 是静态捕获的,
call、apply、bind对它完全无效——它们只能影响普通函数的 this 绑定
典型场景对比:普通函数 vs 箭头函数
看一个常见例子:
用于 inference.sh 的 JavaScript/TypeScript SDK,可运行 AI 应用、构建代理、集成 150+ 模型。包名:@inferencesh/sdk(npm install),完整 TypeScript 支持。
const obj = {
name: 'Alice',
regular() {
console.log(this.name); // 'Alice'(this 指向 obj)
},
arrow: () => {
console.log(this.name); // undefined(this 指向全局,非 obj)
}
};原因:箭头函数 arrow 定义在全局作用域(对象字面量内部不构成新函数作用域),所以继承的是全局 this(浏览器中是 window)。
若想让箭头函数访问 obj 的 this,需把它放在一个普通函数内部定义:
const obj = {
name: 'Alice',
makeArrow() {
return () => console.log(this.name); // this 指向 obj(因 makeArrow 的 this 是 obj)
}
};
const fn = obj.makeArrow();
fn(); // 'Alice'哪些地方不能用箭头函数
因其 this 不可变、无构造能力等特性,以下情况应避免使用:
- 对象方法(尤其是需要访问当前对象属性时)
- 需要通过
new实例化的构造函数 - 需要访问
arguments的函数(改用 rest 参数...args) - Generator 函数(不支持
yield) - 需要动态绑定 this 的回调(比如事件监听器中需绑定 DOM 元素时)

















