代码1:
var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
return function(){
return this.name;
};
}
};
alert(object.getNameFunc()());
代码2:
var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
var that = this;
return function(){
return that.name;
};
}
};
alert(object.getNameFunc()());
this指的是当前域。
代码1中,object.getNameFunc()()=this.name,此时this因为出来了(因为匿名function被返回出来了),所以this是当前所在的这个区域(即最外面这个区域)。
代码2中,object.getNameFunc()()=that.name,而that是object,因为在getNameFunc方法中,this所在的区域是属于object,将this赋值给that,即将object赋值给that。
可以用如下代码检测想法:
var name = "this window"
var object={
name:"this object",
getNameFunc:function(){
function f2(){
var that=this
console.log(that) //window对象
console.log(that.name) //this window
}
return f2;
}
}
object.getNameFunc()()
this是关键字,所以this会根据当前所在的区域而变化。但声明的变量(例如that)存的值(存的是object)是不会变的。