JavaScript中this原理及内存分析

是什么:

this对象称为函数执行的上下文对象
说实在的,我当时看到这个定义真是不知所以然,真是憋了好久,看了好多资料,才把它搞明白。

说白了,就是当调用一个函数时,谁调用这个函数,this就是谁。
如果还不太明白的话,看个例子

例子:

//创建一个name变量
var name="全局";

//创建一个fun()函数
function fun(){
	console.log(this.name);
};

//创建两个对象
var obj={
	name:"猪八戒",
	sayName:fun
}
var obj1={
	name:"孙悟空",
	sayName:fun
}

外部调用:

obj.sayName();//输出猪八戒
obj1.sayName();//输出孙悟空
fun();//输出全局

当这个三行代码共同调用fun函数时,this的前后变化

obj
obj1
windows//它是整个html页面的对象,全局变量是它的属性

那么,这个this到底用来干嘛,接下来从内存的角度分析一下。

内存分析

JavaScript内存主要分为两种,堆和栈,栈存放变量,堆存放复杂对象,根据这个,就可以得出下面的图

在这里插入图片描述
咱们知道在js中函数也是对象,程序员是聪明的不能在每一个对象中都放着一个函数,这样会造成大量冗余代码,于是把重复的代码提出来,就生成了函数对象。
当多个对象调用同一个函数时,为了区分是哪个对象调用的,于是有了this
,this就指向了调用函数的对象(this指针),这也是为啥叫它函数执行上下文对象的原因。

感谢大家阅读,如有错误,还请大佬指出交流。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿成长轨迹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值