箭头函数不绑定this,其this词法继承外层函数作用域;在promise.all中使用时,只要定义位置正确(如类方法内),this就能正常访问实例属性,无需额外绑定。

箭头函数本身不绑定 this,它会沿作用域链向上查找外层的 this,所以在 Promise.all 中使用箭头函数时,this 的值取决于定义该箭头函数时所在的上下文,而不是调用时的上下文。这意味着你不需要“传递” this,只要确保箭头函数定义在正确的 this 作用域内即可。
箭头函数的 this 是词法绑定的
箭头函数没有自己的 this,它继承自外层普通函数或全局作用域:
- 如果箭头函数写在某个类方法或对象方法里,它的
this就是那个方法的this - 如果写在顶层(模块作用域),
this通常是undefined(严格模式)或全局对象 -
Promise.all只是接收一个 Promise 数组,它不改变内部回调函数的this绑定方式
常见错误:在回调里误以为 this 会自动指向实例
比如在类中这样写:
class ApiClient {
constructor(token) {
this.token = token;
}
fetchAll() {
const urls = ['/a', '/b', '/c'];
// ❌ 错误:map 回调是箭头函数,但外层没有 this 上下文?
return Promise.all(
urls.map(url => fetch(url, { headers: { 'Authorization': this.token } }))
);
}
}
这段代码其实 ✅ 是正确的——因为 map 的箭头函数定义在 fetchAll 方法内部,而 fetchAll 是普通函数,其 this 指向类实例,所以 this.token 能正常访问。
需要特别注意 this 丢失的场景
以下情况会导致 this 不可用,和箭头函数无关,而是外层函数的 this 本就丢失了:
- 把方法单独提取出来使用:
const fn = instance.fetchAll; fn();→ 此时fetchAll内部的this是undefined,箭头函数也跟着拿不到 - 作为事件回调、定时器、或传给第三方函数时未正确绑定
this - 解决方法不是改箭头函数,而是确保外层函数的
this正确:用bind、类字段箭头函数、或在调用处用instance.fetchAll.bind(instance)
对比:普通函数 vs 箭头函数在 then 中
Promise.all(...).then(...) 的回调里,用箭头函数更安全:
// ✅ 推荐:箭头函数,this 沿用外层
Promise.all(promises).then(results => {
this.handleResults(results); // this 来自外层方法
});
// ❌ 风险:普通函数,this 指向可能意外(如 undefined)
Promise.all(promises).then(function(results) {
this.handleResults(results); // this 不一定等于外层 this
});











