浅析JavaScript中var that=this
在JavaScript中,经常会出现需要在某个函数中访问到另一个函数内部的this对象的情况。由于this指向的是当前方法所属对象,因此在涉及到复杂多层函数调用嵌套的时候,this对象的指向可能会变得非常混乱,不再是我们期望的那个对象。
为了解决这一问题,通常会用var that=this的方式来保存this对象的指针,从而在后续的函数中直接使用that变量来代替this对象,避免this对象指向混乱的情况。
具体来说,var that=this的作用是将当前this指针保存到一个新的变量中,该变量的作用域与当前函数的作用域相同,因此在后续的函数中,可以直接使用that变量来代替this对象。这样做的好处是可以避免this指针的指向混乱,节省代码量,提高代码的可读性和可维护性。
下面通过一个例子来说明如何使用var that=this来避免this指针混乱的情况:
var obj = {
name: "张三",
age: 18,
sayName: function () {
console.log(this.name);
function innerFunc() {
console.log(this.age);
}
innerFunc();
}
}
obj.sayName();
在以上代码中,obj对象中定义了一个sayName方法和一个内部函数innerFunc。在sayName函数中,this指向的是obj对象,而在innerFunc函数中,this指向的是全局window对象,因此输出结果为:
张三 undefined
为了解决这个问题,我们可以使用var that=this的方式来保存this指针,并在innerFunc函数中使用that变量来代替this对象。修改后的代码如下:
var obj = {
name: "张三",
age: 18,
sayName: function () {
console.log(this.name);
var that = this;
function innerFunc() {
console.log(that.age);
}
innerFunc();
}
}
obj.sayName();
在以上代码中,我们使用了var that=this的方式来保存this指针,并在innerFunc函数中使用that变量来代替this对象。这样就可以正确输出结果:
张三 18
总之,var that=this的作用是为了在JavaScript中避免this指针的指向混乱问题。通过将this对象保存到一个新的变量中,并在后续的代码中使用该变量来代替this对象,可以有效地避免这一问题的出现,提高代码的可读性和可维护性。
