中易网

关于javascript中闭包和this的一个问题

答案:4  悬赏:60  
解决时间 2021-01-16 01:26
  • 提问者网友:情歌越听越心酸
  • 2021-01-15 10:39
关于javascript中闭包和this的一个问题
最佳答案
  • 二级知识专家网友:上分大魔王
  • 2021-01-15 11:35
javascript是动态(或者动态类型)语言,this关键字在执行的时候才能确定是谁。所以this永远指向调用者,即对‘调用对象‘者的引用。第一部分通过代码:object.getNameFunc()调用返回一个函数。这是个返回的函数,它不在是object的属性或者方法,此时调用者是window。因此输出是 The Window
第二部分,当执行函数object.getNameFunc()后返回的是:
function()
{
return that.name;
}
此时的that=this。而this指向object,所以that指向object。无论你执行多少次,他都是对object的引用,所以输出My Object
追问:你好,谢谢你的回答,但我有个疑问:第一个中不能理解为闭包的第一作用域链是闭包本身,然后是闭包外面的函数,之后是window对象么?它不能像原形链那样一直向上寻找么?
追答:因为执行代码object.getNameFunc()之后,它返回了一个新的函数,注意这个函数对象跟object不是一个了,可以理解为全局函数。所以它的name属性不会是My Object。这个例子只能作为关键字this的教材。如果作为寻找变量的例子就不好了
全部回答
  • 1楼网友:神鬼未生
  • 2021-01-15 14:50
调用代码呢?
  • 2楼网友:摆渡翁
  • 2021-01-15 13:33
this表示调用者的owner,在第一个示例中,使用object.getNameFunc();中的this表示object,所以,this.name就是My Object,第二个示例中,使用that = this是对window的引用 ,所以this.name表示The window,因为name 是在window下面的
追问:哥们,第一个结果是The Window,第二个是My Object
  • 3楼网友:底特律间谍
  • 2021-01-15 13:06
var a={b: function(){}}
//因为b是a的一个方法,所以b下的this就是a了,而这个this必需要在非闭包下才=a,闭包解释看下面
==========分割线==========
return function(){}类似于(function(){})(),都是一个闭包,闭包的调用者或者是执行者永远都是window,所以this也就是window了
追问:你说闭包的调用者或者是执行者永远都是window,那第二个作何解释?
追答:你自己都在外面把this传给that了,还做何解?你不是秀逗了吧?
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息