var name="window"; var object = { name:"me", getname:(function(){ return function(){ return this.name; } })() }; alert(object.getname()); //me var name1="window"; var object1 = { name:"me", getname:(function(){ var that=this; return function(){ return that.name; } })() }; alert(object1.getname()); //window var name2="window"; var object2 = { name:"me", getname:function(){ var that=this; return function(){ return that.name; } } }; alert(object2.getname()()); //me
这三段代码 请大神解答一下 尤其是第二段代码 谢谢了
其实你只要在var that=this;这条语句之前把this打出来看一下就知道了。
对于第二段代码:
getname:(function(){
var that=this;
return function(){
return that.name;
}
})()
因为getname的值在定义时就被执行了,所以var that=this中的this已经是Window对象了,但是在返回来的函数体当中
return function(){
return that.name;
}
this还是object对象。这就是为什么第一段代码返回来的me。
谢谢 了然 给你点三十二个赞....
参考一下:http://www.cnblogs.com/mrsunny/archive/2011/11/03/2233978.html
以后豆豆就不要浪费在这种问题上了。
scope chain 什么的我懂 关键是自执行这个吧 如果没有自执行 你看:
var name="window"; var object = { name:"me", getname:function(){ var that = this return function(){ return that.name; } } }; alert(object.getname()); //me
这是为什么....
只要能理解到谁去执行函数,那个 this 就是谁