关于javascript中闭包和this的一个问题
varname="TheWindow"varobject={name:"MyObject",getNameFunc:function(){returnfunction()...
var name="The Window"
var object=
{
name : "My Object",
getNameFunc : function()
{
return function()
{
return this.name;
}
}
}
为什么这个的输出是The Window而下面的输出却是My Object?
var name="The Window"
var object=
{
name : "My Object",
getNameFunc : function()
{
var that = this;
return function()
{
return that.name;
}
}
}
调用代码alert(object.getNameFunc()()); 展开
var object=
{
name : "My Object",
getNameFunc : function()
{
return function()
{
return this.name;
}
}
}
为什么这个的输出是The Window而下面的输出却是My Object?
var name="The Window"
var object=
{
name : "My Object",
getNameFunc : function()
{
var that = this;
return function()
{
return that.name;
}
}
}
调用代码alert(object.getNameFunc()()); 展开
4个回答
展开全部
javascript是动态(或者动态类型)语言,this关键字在执行的时候才能确定是谁。所以this永远指向调用者,即对‘调用对象‘者的引用。第一部分通过代码:object.getNameFunc()调用返回一个函数。这是个返回的函数,它不在是object的属性或者方法,此时调用者是window。因此输出是 The Window
第二部分,当执行函数object.getNameFunc()后返回的是:
function()
{
return that.name;
}
此时的that=this。而this指向object,所以that指向object。无论你执行多少次,他都是对object的引用,所以输出My Object
第二部分,当执行函数object.getNameFunc()后返回的是:
function()
{
return that.name;
}
此时的that=this。而this指向object,所以that指向object。无论你执行多少次,他都是对object的引用,所以输出My Object
追问
你好,谢谢你的回答,但我有个疑问:第一个中不能理解为闭包的第一作用域链是闭包本身,然后是闭包外面的函数,之后是window对象么?它不能像原形链那样一直向上寻找么?
追答
因为执行代码object.getNameFunc()之后,它返回了一个新的函数,注意这个函数对象跟object不是一个了,可以理解为全局函数。所以它的name属性不会是My Object。这个例子只能作为关键字this的教材。如果作为寻找变量的例子就不好了
展开全部
var a={b: function(){}}
//因为b是a的一个方法,所以b下的this就是a了,而这个this必需要在非闭包下才=a,闭包解释看下面
==========分割线==========
return function(){}类似于(function(){})(),都是一个闭包,闭包的调用者或者是执行者永远都是window,所以this也就是window了
//因为b是a的一个方法,所以b下的this就是a了,而这个this必需要在非闭包下才=a,闭包解释看下面
==========分割线==========
return function(){}类似于(function(){})(),都是一个闭包,闭包的调用者或者是执行者永远都是window,所以this也就是window了
追问
你说闭包的调用者或者是执行者永远都是window,那第二个作何解释?
追答
你自己都在外面把this传给that了,还做何解?你不是秀逗了吧?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
this表示调用者的owner,在第一个示例中,使用object.getNameFunc();中的this表示object,所以,this.name就是My Object,第二个示例中,使用that = this是对window的引用 ,所以this.name表示The window,因为name 是在window下面的
追问
哥们,第一个结果是The Window,第二个是My Object
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
调用代码呢?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询