<script>
var name = "The Window";   
var object = {   
     name : "My Object",   
     getNameFunc : function(){   
            return function(){
             return this.name;
            }
      }   
};   
alert(object.getNameFunc()());
</script> 
为什么打印出The window而不是My Object?哪位大神给解释下,不明白这个闭包为了做什么?
闭包

解决方案 »

  1.   

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

  2.   

    return function(){
                 return this.name;
      }
    返回 是一个函数,不是 object 的方法,普通function下的this都是window
    var name = "The Window";  写在外面也是挂在window 下
      

  3.   


    //这里的name是window对象的属性。
    var name = "The Window";   
    var object = {   
         name : "My Object",   
         getNameFunc : function(){   
                return function(){
                 return this.name;
                }
          }   
    };   /*
     * object.getnameFunc()  :返回是的一个函数,这个函数是window对象的方法。
     * object.getnameFunc()():调用window对象的方法,因此,该函数里的this代表window。
     */
    alert(object.getNameFunc()());
      

  4.   

    你这个应该用自执行函数+闭包实现(function() { 
      var msg = "My Object"; 
      window.onload = function() { 
        alert(msg); 
      } 
    })(); 
      

  5.   

    这个闭包没有什么功能,只是测试一下,一般的情况闭包是为了让返回的函数能继续访问外层作用域的变量,
    这里闭包内的this指代的是window 对象,因为每个函数被调用的时候会自动取得两个特殊的变量:this和arguments。内部函数在搜索这两个变量的时候,只会搜索到其活动的对象为止,因此永远不可能访问外部函数中的这两个变量,你就记住匿名函数的this是window就好
      

  6.   


    alert(object.getNameFunc()());
    //等同于:
    alert(
      (function(){
        return this.name;
      })()//此处为全局环境下匿名函数自执行,this在这里自然是window对象
    )
      

  7.   

    object.getNameFunc()();要这样理解
    this[匿名] = object.getNameFunc();
    this[匿名]();
    而执行时的this在window这个根下面。
      

  8.   

    <script>
    var name = "The Window";   
    var object = {   
         name : "My Object",   
         getNameFunc : function(){
                  alert(this.name+' now');
                return function(){
                 return this.name;
                }
          }   
    };   
    alert(object.getNameFunc()());
    </script> 
    给你看看这个代码你就明白了~,外面那层return,调用他的是object,返回一个函数,就是里面那个函数;里面那个函数,调用它的是全局,所以this指代的是全局,即window,所以返回the window