如何理解JavaScript this的指向

2020-07-02  本文已影响0人  阿克伦之子

实习期间写代码时候就感觉this很迷。有些不知所措。后来查看了部分文章。

this最终指向的是调用它的对象(这个已经理解了大部分了)

箭头函数中的this

在箭头函数内部,this 绑定不是 动态的,而是词法的。什么时候创建一个作用域!页面加载时候全局作用域 函数调用时候局部作用域。这个时候this已经确定了 调用者一般决定着this的走向。

上面是基本概念,比较虚的。直接上代码

代码环境:


image.png
//直接在暴露在全局
```javascript
  //直接在暴露在全局
  const aa = () => {
        console.log(this);
  };
  aa();
  // 执行出来之后就是 Window

这个很简单。this指向Window嘛。至于为什么 因为这个aa是全局变量(是定义在最外面的变量),可以这样理解,执行时候它被全局环境所包含。所以就是windows。不过不挂在window全局对象上面哈。(这里理解一下 let const 和 var的挂全局对象的区别哈)。

// 继续来一段: 
const bb = {
        aa: () => {
            console.log(this);
        },
        b: function () {
            this.aa();
        }
    };
   bb.b();
// 这里还是输出的Windows
// 继续来一段: 
const bb = {
        aa: function() {
            console.log(this);
        },
        b: function () {
            this.aa();
        }
    };
   bb.b();
// 这里输出的bb的这个对象

非箭头申明函数(普通函数)只有函数执行的时候才能确定this到底指向谁实际上this的最终指向的是那个调用它的对象

箭头函数是在函数在定义时,this就继承了定义函数的对象。 那么这个如何确定这个定义函数的this呢?还是从作用域。在当前作用域内this的指向。比如

const bb = {
        aa: () => {
            console.log(this);
        },
        b: function () {
            this.aa();
        }
  };
bb = {} 是一个块级作用域,访问对象时候(个人感觉也会确定一个上下文。
然后加载一些活动记录。this也在记录里面,又因为bb是全局变量。
所以就是this指向的就是Window)所以箭头函数指向的就是Window。
上一篇 下一篇

猜你喜欢

热点阅读