为了账号安全,请及时绑定邮箱和手机立即绑定

JavaScript闭包作用域问题,JS大神进!

JavaScript闭包作用域问题,JS大神进!

素胚勾勒不出你 2018-10-12 15:14:23
var name = "The Window";   var object = {     name : "My Object",     getNameFunc : function(){       return function(){         return this.name;       };     }   };   alert(object.getNameFunc()());这一段返回的为什么是 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()());返回的是My Object,这里面的var that = this改变了指向吗,这里的That是哪个对象?
查看完整描述

2 回答

?
GCT1015

TA贡献1827条经验 获得超4个赞

匿名函数的this一般都是window。

第一段代码 getNameFunc 对应的function的this指向object,但该函数返回了另外一个函数,函数是匿名的(this指向window)

第二段代码中通过闭包,让匿名函数引用getNameFunc 的局部变量that(其实是getNameFunc 的this)

匿名函数执行寻找that变量时,它自己是没有这个变量的,就向上找that,这时的that,引用的是getNameFunc 的this,也就是object。


查看完整回答
反对 回复 2018-10-31
?
RISEBY

TA贡献1856条经验 获得超5个赞

在 getNameFunc 方法里面 this 指向的是 object,因为这些一个对象的方法,

而更里面 return 的那个 function 里面 this 指向的是全局对象,因为这个 function 是个普通调用的函数,它不是 object 的方法

具体来说你需要了解在各种情况下函数调用时 this 的指向问题


查看完整回答
反对 回复 2018-10-31
  • 2 回答
  • 0 关注
  • 713 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信