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值自然得到保留

猜你喜欢

转载自bingsizi.iteye.com/blog/2266254