this 对象在 JS 中是在函数运行时基于函数的执行环境绑定的。而匿名函数的执行环境具有全局性,也就是说,在匿名函数中,this 对象通常指向 window。
var name = "Tom"; var person = { name : "Jack", sayName : function(){ return (function(){ return this.name; })(); } } person.sayName(); //Tom
上面在闭包中访问 this.name,其中的 this 对象并非取得自身或是 person 的 this 对象,而是指向 window。
如果需要在闭包中访问外部函数的 this 对象,那么,可以在外部函数中定义一个变量,将 this 对象传给该变量。
var name = "Tom"; var person = { name : "Jack", sayName : function(){ var self = this; return (function(){ return self.name; })(); } } person.sayName(); //Jack