JavaScript中的函数会形成闭包。 闭包是由函数以及创建该函数的词法环境组合而成。这个环境包含了这个闭包创建时所能访问的所有局部变量

    1. var name = "The Window";
    2. var object = {
    3.   name : "My Object",
    4.   getNameFunc : function(){
    5.     return function(){
    6.       return this.name;
    7.     };
    8.   }
    9. };
    10. alert(object.getNameFunc()());

    运行结果:The Window
    解释:object.getNameFunc()这是属于方法调用,this指针指向的是object,可以用一个变量tmp引用它的结果,实际上tmp就是这个方法返回的那个匿名函数function(){return this.name;};,此时并没有执行内部代码,执行tmp()时,也就是object.getNameFunc()()时,属于函数调用(另一篇博文详解了这里,链接),this指针指向window,最终返回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
    解释:在调用getNameFunc()时,属于方法调用,那么this指针指向object,把它被that引用,那么返回的匿名函数中时刻保持对object的引用,很好理解。