es6箭头函数中的this指向

本文深入探讨了JavaScript中箭头函数的this绑定规则。解释了箭头函数如何捕获其定义时所在上下文的this值,以及这种绑定方式如何区别于普通函数。通过实例展示了箭头函数在不同上下文中this的指向。

箭头函数中的this是在定义函数的时候绑定,而不是在执行函数的时候绑定。

箭头函数中的this是指向外部作用域中的this

// 普通函数中的this
const obj = {
  name: 'John',
  greet: function() {
    console.log(`Hello, my name is ${this.name}!`);
    const arrowFunction = () => console.log(`Arrow function this.name: ${this.name}`);
    arrowFunction();
  }
};
 
obj.greet();
 
// 输出:
// Hello, my name is John!
// Arrow function this.name: John

在JavaScript中,箭头函数没有自己的this,它会捕获其在定义时所处的上下文中的this值。这意味着箭头函数的this与任何包含它的普通函数的this一致。

在上面的例子中,greet函数是在对象obj的上下文中定义的,因此它的this指向obj。箭头函数arrowFunction捕获了这个this值,所以它也指向obj,可以访问obj的name属性。

      var m = () => {
        console.log(this);
      }; //定义了一个箭头函数为m
      var obj = {
        a: m,
        b: function() {
          m();
        },
        c: function() {
          var m2 = () => {
            console.log(this);
          }; //每个对象都会新建这个箭头函数
          m2();
        }
      };
      obj.a(); //打印结果:window
      obj.b(); //打印结果:window
      obj.c(); //打印结果:obj

      var obj2 = {};
      obj2.c = obj.c;
      obj2.c(); //打印结果:obj2

下面分析四次打印:

1、箭头函数定义时所在作用域为全局域,因此箭头函数内的this就是全局域的this,也就是window。且箭头函数不受call的影响,即语法糖使其还原为obj.a.call(obj)也是无效的,this不会变。因此打印结果为window。

2、虽然是在b函数中调用的,但是m函数并不在这里被定义。后续分析基本同1,打印结果为window

3、c函数中重新定义出一个箭头函数m2,而函数m2所在作用域为c函数作用域,所以c函数内的this是什么,箭头函数内的this就是什么。显然此时c函数内的this是obj,因此最终打印结果为obj

4、同3,此时函数c内的this是obj2,因此打印结果为obj2

ES6中定义的时候绑定this的具体含义,应该继承的是父执行上下文里面的this,切忌是父执行上下文!!!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值