是什么:
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指针),这也是为啥叫它函数执行上下文对象的原因。
感谢大家阅读,如有错误,还请大佬指出交流。