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

闭包中this指向问题

闭包中this指向问题

SMILET 2018-10-19 10:22:13
以下是简单的代码:var name = " Window";var o = {name : "Object", getName : function(){    return function(){        return this.name;     }; }};var a = o.getName;a()();var c = o.getName()();var o1 = {name : "My Object", getName : function(){    var that = this;    return function(){        return that.name;     }; }};var d = o1.getName()();var e = o1.getName;e()();请问1 :var c = o.getName()()中在运行o.getName()时,this的指向还是o,为什么o.getName()()时,this的指向就成了window?请问2 :var a = o.getName;a()();这种方式和o.getName()()有什么区别?
查看完整描述

1 回答

?
噜噜哒

TA贡献1784条经验 获得超7个赞

当一个函数作为方法调用时,其this指针指向调用它的对象,否则this为undefined(strict mode)或window(浏览器),global(node)

o.getName()()中,getName作为o的方法调用,其this指针就指向了o,所以o.getName()执行时this指向o。
然后o.getName()返回一个函数,o.getName()()就等价于(o.getName())(),可以看到新的函数没有作为任何一个对象的方法调用,只是孤立的作为函数调用,其this指针就指向window。

如果像var a = o.getName; a()();这样将getName提取出来再调用,赋值给a的只是getName的函数本身,并不包括调用它的环境。a()运行时a只是一个函数,并没有作为任何对象的方法,其this指针就已经指向window了。


查看完整回答
反对 回复 2018-11-08
  • 1 回答
  • 0 关注
  • 565 浏览
慕课专栏
更多

添加回答

举报

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