js中的this到底是什么???

36 篇文章 1 订阅

this有很多个名字,上下文,执行环境变量等等
还有的说this是调用对象的引用,谁调用,this指向谁
那this到底是个啥?
this只有在函数中才存在?
this为什么需要这个,解决的问题是啥?

首先先贴代码看看
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200822172520690.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjQ1ODk2NQ==,size_16,color_FFFFFF,t_70#pic_center

在这里插入图片描述

此时函数中的this取到的是不同的a值

要究其根本,那我们先来说一下定义变量和函数时,计算机是怎么储存的。

例如,我们定义一个变量(对象)
let a = {
b: 1
}

我们是定义了一个a在栈中,同时会在堆中开辟一块空间,那么我们a是一个指针,存放的是开辟的空间地址。那么,我们如果要a.b取值的时候,那么我们的js引擎就会找到a,再通过a的内存地址找到空间,再通过存储空间找到属性b对应的值

那么我们的b是通过数据属性来存储值的,也就是

obj = {
foo: 5
}
在这里插入图片描述
那我们如果我们在对象中放的是方法呢?比如这样:

var obj = { 
	foo: function () {} 
};

那我们foo的数据属性的value中放的应该是函数function的地址

在这里插入图片描述
由于我们的函数是单独开辟空间存储,所以他是谁调用,函数的内存地址就给哪一个对象的属性。所以它可以在不同的环境(上下文)执行

由于我们在函数中可以取变量,如
var f = function () {
console.log(x);
};

上面代码中,函数体里面使用了变量x。该变量由运行环境提供。

现在问题就来了,由于函数可以在不同的运行环境执行,所以需要有一种机制,能够在函数体内部获得当前的运行环境(context)。所以,this就出现了,它的设计目的就是在函数体内部,指代函数当前的运行环境。

所以,解答开头的问题
1那this到底是个啥?
this,是上下文,执行环境,就是执行对象的引用
2this只有在函数中才存在?
是的,只存在于函数中,普通函数,构造函数中都有
3this为什么需要这个,解决的问题是啥?
函数中,可以调用当前环境的属性或方法,但是我们的函数,是单独存放的空间中,它可以在任意对象中存在。也可以被任意对象调用。怎么确定到底是在哪一个对象中,哪一个执行环境下?所以,我们就用this来指代这个执行环境,调用函数的对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值