深刻理解this和闭包的实例

#1:

var name = "The Window";

  var object = {
    name : "My Object",

    getNameFunc : function(){
      return function(){
        return this.name;
      };

    }

  };

  alert(object.getNameFunc()());   //The Window

 #2:

var name = "The Window";

  var object = {
    name : "My Object",

    getNameFunc : function(){
      var that = this;
      return function(){
        return that.name;
      };

    }

  };

  alert(object.getNameFunc()());    //My Object

 上面两个例子可能不好理解,我把它改写一下:

#1:

var name = "The Window";
  var object = {
    name : "My Object",
    getNameFunc : function(){
      return function(){
        return this.name;	//这个this是有上下文的限制的
      };
    }
  };
var tmp = object.getNameFunc(); //此时没有执行this.name
var name = tmp();//这个时候才执行,这时候的this上下文为全局
alert(name);   //The Window
//alert(object.getNameFunc()())

 #2:

var name = "The Window";

  var object = {
    name : "My Object",

    getNameFunc : function(){
      var that = this;
      return function(){
        return that.name;
      };
    }
  };
var tmp = object.getNameFunc();	//这个时候执行了that = this,这里的this上下文是object,所以that指的是object
var name = tmp ();	//这个时候执行了that.name
alert(name);   //My Object
//alert(object.getNameFunc()()); 

  

 把他们分开写,是不是好理解多了。

 

posted @ 2019-02-23 17:56  neo_o  阅读(132)  评论(0)    收藏  举报

愿你的生活只有诗和远方