在闭包中使用this对象会导致一些问题,this对象在运行时是基于函数的执行环境绑定的:在全局环境下,this等于window,当函数被作为某个对象的方法调用时,this指向这个对象。匿名函数的执行环境具有全局性。在闭包中使用this可能会出现非预期的结果。
var name="window";
var obj={
name:"object",
getname:function(){
return function(){
return this.name;
}
}
}
alert(obj.getname()) //***返回function(){return this.name;}
alert(obj.getname()()) //返回 "window"
为作对比,我在*标记出加了一句代码。这句代码返回一句function函数。再看最后一句,obj.getname()()是对上一句返回函数的执行,由于obj.getname()返回的是个匿名函数,在执行obj.getname()()时,相当于在全局环境下,定义了一个函数:
var newfunction = function(){
return this.name;
}
这种情况下this自然指向的是全局环境中的name。