美文网首页
关于JS闭包中的this执行讨论

关于JS闭包中的this执行讨论

作者: 秘果_li | 来源:发表于2019-02-25 22:39 被阅读0次

    例子来源http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html

    例一

     var name = "The Window";
    
      var object = {
        name : "My Object",
    
        getNameFunc : function(){
          return function(){
            return this.name;
          };
        }
      };
      alert(object.getNameFunc()()); //The Window
    

    例二

    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. 函数中的this指的是调用这个函数的owner
    1. object.getNameFunc()是返回一个函数,并没有执行函数中的代码

    例一做如下改动

      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
    

    例二做如下改动

    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 = object.getNameFunc();    //这个时候执行了that.name
    alert(name);//My Object
    

    相关文章

      网友评论

          本文标题:关于JS闭包中的this执行讨论

          本文链接:https://www.haomeiwen.com/subject/jtynyqtx.html