var Test ={
foo:"test",
func:function () {
var self=this;
console.log(this.foo);
console.log(self.foo);
(function () {
console.log(this.foo);
console.log(self.foo);
})();
}
};
Test.func();
输出 test test undefined test
this指针是执行其调用者,在执行Test.func(),后func的调用者是Test这个对象,所以func内部的this指针指向了Test,所以第一个this.foo和self.foo很好理解,需要注意的是self这里作为一个变量把this指针指向者也就是Test保存下来了,所以内部的函数闭包在执行的时候没有调用者,所以this指针指向了window对象,window对象没有foo这个变量,所以输出undefined,然后下面的self.foo访问了闭包外部的self变量也就是刚保存下来的Test对象;因此输出了test;
另外注意的是:如果一个函数是自身调用,没有其他的对象调用的话,在非严格模式下,this指针指向的是全局对象,也就是window对象,如果在严格模式下,this指针指向的是undefined,也就是说非严格模式下如果this指针指向了undefined,那么就会默认指向window对象;
稍微对你的题目变形一下