var name = "The Window";var object = {
name : "My Object", getNameFunc : function(){
return function(){
return this.name;
}
}
}
alert(object.getNameFunc()());为什么会输出"The Window";
我以为是输出"My Object";因为return this.name返回给了return function(),而return function()又返回给了getNameFunc : function(),是这样理解吗? getNameFunc : function()不是查找最近的同名变量吗?
还有object.getNameFunc()(), 这里有两个括号.去掉一个括号就输出function(){return this.name;} 这整个代码了.为什么会这样啊.?
name : "My Object", getNameFunc : function(){
return function(){
return this.name;
}
}
}
alert(object.getNameFunc()());为什么会输出"The Window";
我以为是输出"My Object";因为return this.name返回给了return function(),而return function()又返回给了getNameFunc : function(),是这样理解吗? getNameFunc : function()不是查找最近的同名变量吗?
还有object.getNameFunc()(), 这里有两个括号.去掉一个括号就输出function(){return this.name;} 这整个代码了.为什么会这样啊.?
var name = "The Window";var object = {
name : "My Object", getNameFunc : function(){
var that=this; //加这句是保存作用域对象,让其在函数内部继续使用!
return function(){
//alert(this);//验证this,此时为全局对象window;
return that.name; //等同于return window.name,自如就返回"The Window"
}
}
}
alert(object.getNameFunc()());
因为object的getNameFunc()函数返回的是一个函数啊,就是那个return function(){},所以当然要给这个函数加上()让它执行,否则就显示这个函数的定义体了。SOSO
var object = {
name : "My Object",
getNameFunc : function(){
return function(){
return this.name;
}
}
}
var obj2 = {
name : "旺财"
}
alert(object.getNameFunc()());
alert(window.object.getNameFunc()());
alert(object.getNameFunc().apply(obj2));1.调用window.object.getNameFunc()返回的function相当于独立在document中重新定义个function
2.在前面条件成立下,document中的function会附着在window对象上,变成。window对象的一个属性
3.function中有一个this关键字,它是跟着执行环境(对象)变化的,它会去寻找当前调用方法所关联调用对象是否有一个name属性我改良了一下,为了证明上面所说的:
window.object.getNameFunc()() : 相当于独立在document中重新定义个function
object.getNameFunc().apply(obj2) : this跟着执行环境(对象)变化