箭头函数不绑定this,而是沿词法作用域继承外层this,因此在数组高阶方法中可避免this丢失;但不能用于需动态this的场景(如DOM事件处理器),且无法通过call/apply/bind修改其this。

箭头函数本身不绑定 this,它直接沿词法作用域向上查找外层的 this 值。在数组高阶方法(如 map、filter、reduce)中使用箭头函数,本质是利用闭包捕获定义时所在上下文的 this,从而避免普通函数因调用方式变化导致的 this 丢失。
箭头函数自动继承外层 this
只要箭头函数写在某个对象方法或类实例方法内部,它的 this 就和外层函数一致,无需额外处理。
- 类中直接使用
this.xxx访问实例属性或方法,不会报错 - 普通对象方法内定义的箭头函数,
this指向该对象(前提是外层函数的this已正确绑定) - 不能用于需要动态
this的场景,比如作为 DOM 事件处理器直接绑定到元素上
对比普通函数的问题
普通函数在高阶方法回调中执行时,属于“独立调用”,this 会退回到全局对象(非严格模式)或 undefined(严格模式)。
- 常见错误:在
map回调里写this.data.push(...),结果报Cannot read property 'push' of undefined - 传统解法需提前保存
const self = this或用bind(this),代码冗余 - 箭头函数省去这些步骤,语义更清晰
实际写法示例
以下是在类中安全使用箭头函数处理数组的典型方式:
-
✅ 正确:在
process()方法内用箭头函数遍历this.items -
❌ 错误:把普通函数传入
map后试图访问this,未做绑定 -
✅ 推荐补充:若高阶方法嵌套较深(如
reduce中再调用map),仍确保最外层作用域的this是预期对象
注意边界情况
箭头函数的 this 在定义时就已锁定,运行时无法改变。这意味着:
- 不能用
call、apply或bind强制修改它的this - 如果外层函数的
this本身就是undefined(比如在模块顶层箭头函数中),那它捕获的也是undefined - 异步操作中变量被重新赋值,不是
this问题,而是变量覆盖问题,需单独处理











