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指针),这也是为啥叫它函数执行上下文对象的原因。

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

发布了158 篇原创文章 · 获赞 54 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/shang_0122/article/details/103989975