楼上解释的不清楚,我来告诉你。重点是getNameFunc返回的是一个干净的函数,你执行getNameFunc()()相当于直接调用return this.name,而直接执行一个函数的时候是没有this的,默认this就是globalObject,在浏览器下globalObject就是window
你想要做闭包就必须引用变量,比如你说的that,你可以var that,object; that = object = { 在function里面that就会引用外层的that
当然不在了,在你的代码中:object是一个类对象,name是属性,getNameFunc是方法;不过,方法中都是可以用name属性
object的变量对象在其作用域中。对于getNameFunc来说,其运行时的作用域链中有三个对象,最前面的是getNameFunc的活动对象,第二个是object活动对象,第三个是全局对象。
而且你上面的代码也有错误,return that.name这句中的that你都还没声明。上面这个问题在《javascript高级程序设计》第二版中已经有详细的解释,把里边作者说的内容看几遍,应该就懂了。