代码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()());

警告"我的对象"。
我知道代码2重命名"这" "那是"但我不知道为什么代码1警告" The Window"。
答案 0 :(得分:1)
说明javascript范围的工作原理!但我对你的代码有疑问:
函数中的为什么函数中有两个return语句?
语句,即
return function(){
return this.name;
}
是错误的,因为它首先从你的函数返回到当前范围,即窗口/文档。因此,内部语句实际上是为当前范围调用的,因此返回" The Window"!
Insted你只需要打电话
return this.name;
没有包装函数,现在它将返回"对象"因为它在对象范围内返回!
答案 1 :(得分:0)
提示"此":
this
指向当前上下文的Object(不是函数)。
所以这里上下文很重要。
所以
在code1中 - this
在匿名函数内部,因此它在全局上下文中,所以在这里,它指向window
对象。
即
这里将打印:window.name
= The Window
在code2中 - this
位于创建的object
的实例函数中,因此它位于object
上下文中,所以在这里,它指向object
。
即。
这里将打印:object.name
= My Object
希望它会有所帮助:)谢谢:)
答案 2 :(得分:-1)
这可能是关于"关闭"的问题,您可能希望看到: http://www.demo.com/xxxx?t=
在代码1中,this
位于设备下方,因此它指向设备的名称。
var name
这里是全局变量。所以你会得到The Window