var name="the window"; var obj={ name:"my window", getName:function(){ return function(){ return this.name; } } } alert(obj.getName()())//the window //等价于 alert(this.name)
这里之所以打印the window是因为闭包的执行环境具有全局性。因为内部函数在搜索this时,只会搜索其活动对象,然而闭包没有被其他对象调用,所以其this具有全局性,所以里面的this 等于window。
解决办法:
var name="the window"; var obj={ name:"my window", getName:function(){ var that = this; return function(){ return that.name; } } } alert(obj.getName()())//the window //等价于 alert(this.name)