箭头函数不绑定自己的this,而是直接从外层词法作用域继承定义时的this值;它无法通过call、apply、bind修改this,也不能作为构造函数使用。

箭头函数不绑定自己的 this,而是**直接从外层词法作用域继承 this 值**——这个 this 是在函数定义时确定的,不是调用时决定的。
为什么箭头函数没有自己的 this
普通函数的 this 由调用方式(如 obj.method()、new Fn()、call())动态绑定;而箭头函数被设计为“更轻量的函数表达式”,它完全跳过 this 绑定过程,直接沿作用域链向上查找最近一层非箭头函数的 this 值。
继承机制的关键:定义时的外层 this
箭头函数捕获的是它被声明时所在上下文的 this,不是运行时的。常见场景如下:
- 在对象方法中定义箭头函数 → 继承该方法执行时的
this(即对象本身) - 在构造函数或类方法中定义 → 继承实例的
this - 在全局作用域定义 → 继承全局对象(浏览器中是
window,严格模式下是undefined)
对比示例:普通函数 vs 箭头函数
const obj = {
name: 'Alice',
regular() {
console.log(this.name); // 'Alice'
setTimeout(function() {
console.log(this.name); // undefined(this 指向 window)
}, 100);
setTimeout(() => {
console.log(this.name); // 'Alice'(继承外层 regular 的 this)
}, 100);
}
};
obj.regular();
上面例子中,箭头函数里的 this 就是 regular() 执行时的 this(即 obj),所以能正确访问 name。
立即学习“Java免费学习笔记(深入)”;
注意边界情况
- 箭头函数不能用
call、apply、bind改变this—— 它们对箭头函数无效 - 箭头函数不能作为构造函数(不能用
new调用),因为它没有this绑定逻辑 - 如果外层没有非箭头函数(比如顶层箭头函数),就继承全局
this,需留意严格模式影响


















