查了网上一些资料,对闭包似懂非懂,下面例子为何这样输出,请大侠指导,谢谢!var name = "The Window"; var object = {
name : "My Object", getNameFunc : function(){
return function(){
return this.name;
}; } }; alert(object.getNameFunc()());输入"The Window",为什么不是"My Object"?
name : "My Object", getNameFunc : function(){
return function(){
return this.name;
}; } }; alert(object.getNameFunc()());输入"The Window",为什么不是"My Object"?
var v=f();//f(){return this.name} 这里的this是默认的window
alert(v);
var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
var that = this;//这里的this才是object对象的引用
return function(){
return that.name;
};
}
};
alert(object.getNameFunc()());
你是对this绑定不理解,去看看 javascript语言精粹
this的上下文为什么是window,不是object呢?谢谢!
window={
我们的代码。
}
return this.name;
};
这个是window调用的,并不是object调用的
根据结果我也知道这里的this是window,但不知道为什么是window,能否结合作用域链的调用顺序给解释下?谢谢!
返回的匿名函数并不是object对象的方法,
调用的该函数只属于函数调用模式而不是方法调用模式,
函数中的this当然是指向全局变量window
http://iamduyu.cn/?p=308这个问题的关键是对this的理解,this并不是函数定义时决定的,而是函数被调用的时候决定的。this的本意是,“我这个函数作为哪个对象的方法被调用,那么函数体内this就是指这个对象,如果没有作为任何对象的方法来调用,则指window”。我们看到,虽然你的函数好像被层层对象“包围”,但是实际调用它的时候:alert(object.getNameFunc()());
它并不是任何对象的方法,那么this就是指window。
如果:
var object2={};
object2.memberFunc=object.getNameFunc();
alert(object2.memberFunc());
那么,由于函数被挂靠在object2下,则这时this指object2.