当前位置: 首页 > news >正文

箭头函数的this指向谁

先看1个重要原则:

        由Vue管理的函数,一定不要写箭头函数,箭头函数的this就不再是Vue实例了

箭头函数的 this 指向在定义时确定,继承自外层作用域(即定义时的上下文)的 this,且无法通过 callapply  或  bind 改变。以下是关键点总结:

1. 词法作用域的 this

  • 箭头函数没有自己的 this,它使用外层非箭头函数作用域的 this 值。若外层没有函数,则指向全局对象(如 window 或 global)。

  • 示例

    const obj = {
      value: 42,
      getValue: function() {
        // 普通函数中的 this 指向 obj
        const arrowFn = () => this.value;
        return arrowFn();
      }
    };
    console.log(obj.getValue()); // 输出 42

    2. 与普通函数的区别

  • 普通函数this 由调用方式决定(如对象方法、构造函数、事件监听等)。

  • 箭头函数this 固定为定义时的外层 this

  • 示例对比

    // 普通函数(this 指向调用者)
    const obj1 = {
      value: 10,
      fn: function() { console.log(this.value); }
    };
    setTimeout(obj1.fn, 100); // 输出 undefined(this 指向全局)
    
    // 箭头函数(this 继承外层)
    const obj2 = {
      value: 10,
      fn: function() {
        setTimeout(() => console.log(this.value), 100); // 继承外层 this(obj2)
      }
    };
    obj2.fn(); // 输出 10

    3. 无法通过绑定方法修改

  • 使用 callapply 或 bind 无法改变箭头函数的 this

  • 示例

    const outerThis = { name: "Outer" };
    const arrowFn = () => console.log(this.name);
    arrowFn.call({ name: "New" }); // 输出 "Outer"(若外层 this 指向全局则可能输出 undefined)

    4. 对象字面量中的陷阱

  • 对象字面量不创建作用域,内部箭头函数的 this 指向全局。

  • 示例

    const obj = {
      value: "Hello",
      getValue: () => console.log(this.value) // this 指向全局(如 window)
    };
    obj.getValue(); // 输出 undefined(假设外层为全局)

    5. 在构造函数中的行为

  • 箭头函数作为构造函数会报错(不能 new)。

  • 但若在构造函数内定义,箭头函数会继承实例的 this

    function Person() {
      this.age = 0;
      setInterval(() => {
        this.age++; // this 指向 Person 的实例
      }, 1000);
    }
    const p = new Person(); // age 每秒自增

    6.总结

  • 箭头函数的 this:继承自定义时的外层作用域,且不可更改。

  • 使用场景:需要固定 this 时(如回调、事件处理、setTimeout)。

  • 避免场景:需要动态 this 时(如对象方法、构造函数)。

通过理解箭头函数的词法 this 特性,可以更灵活地控制代码中的上下文绑定。

    相关文章:

  • trl + 大模型reward训练
  • 【大模型】DeepSeek使用与原理解析:从V3到R1
  • 424个蒙太奇电影风格空气 、火焰 、飞越、运动、岩石、车、水通用嗖嗖声音效库
  • Python----Python高级(网络编程:网络高级:多播和广播,C/S架构,TCP,UDP,网络编程)
  • 蓝桥与力扣刷题(230 二叉搜索树中第k小的元素)
  • Java项目《苍穹外卖》BUG修复记录
  • 微分方程(Blanchard Differential Equations 4th)-补充习题03
  • windows11 wsl报错
  • 总部年会天府感怀
  • 动态规划 之 数组长度加长规避初始化
  • internVL的本地部署微调实践——L2G4
  • 标准输入输出流,面向对象,构造函数
  • Kafka集群,常见MQ面试问题
  • 聚簇索引和非聚簇索引
  • 蓝桥杯 Java B 组之栈的应用(括号匹配、表达式求值)
  • Python 2 和 Python 3 在字符串编码上的差异
  • java八股文之Redis
  • 政务浏览器API文档及Demo大升级
  • uniapp二次封装组件(py组件)
  • SQL复习
  • 一周文化讲座|城市移民与数字时代的新工作
  • 深圳下调公积金利率,209万纯公积金贷款总利息减少9.94万
  • 上海:5月8日起5年以上首套个人住房公积金贷款利率下调至2.6%
  • 前瞻|美联储明晨“按兵不动”几无悬念:关税战阴霾下,会否释放降息信号
  • AMD:预计美国芯片出口管制将对全年营收造成15亿美元损失
  • 我国外汇储备规模连续17个月稳定在3.2万亿美元以上