javascript 闭包函数中的this理解

总结:个人认为 闭包返回的匿名函数的this作用域为此函数引用者的本身。

 

看代码吧:

var name="hello";

var object={
     name:"my Object",
     getName:function (){
          return function(){
               return this.name;
           }
     }
}

var zhangsan = object.getName();
alert(zhangsan());

 这边代码中 object的getName方法返回了一个匿名函数.函数中调用了this.

alert的结果为:hello;

为什么呢?因为  var zhangsan = object.getName();的时候 zhangsan 为全局变量.代码变为

var zhangsan = function(){
   return  this.name;
}

 此时的this.表示window。所以alert为hello;

改写上边代码

var name="hello";

var object={
  name:"my Object",
     getName:function (){
          return function(){
               return this.name;
           }
     }
}

var tt={
  name:"my tt",
    getName:object.getName()
}

alert(tt.getName());

 此时.alert输出的为tt的name:my tt

因为object.getName()返回的匿名函数赋值给了tt对象上的一个属性。所以执行匿名函数时this的作用域为tt.

##或者这样可能更清晰的理解。把getName的方法引用重新赋值给object对象

 object.cc = object.getName();  
alert(object.cc()); 

 结果为my Object!

 

当然为了不让匿名函数费劲的去寻找作用域可以这么写:

var name="hello";

var object={
  name:"my Object",
     getName:function (){
          var $this = this;
          return function(){
               return $this.name;
           }
     }
}

alert(object.getName()())

 得到结果为 myObject 在return匿名函数之前,把this赋值给一个变量.所以执行时$this为object。name值自然得到保留

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值