js 闭包 思考题 求高手解释
Js代码
var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
return function(){
return this.name;
};
}
};
alert(object.getNameFunc()()); //The Window
居然弹出The Window 太诡异了!!!!!!!
------解决方案--------------------个人理解如下,仅供参考:
var name = "The Window";
这个name实际是window.name
你return的这个function实际上也是window的function,因为js中申明的变量都是window的,这个function也是和name一样,属于一个变量(暂且叫变量吧,忘记是拿什么次形容它了),它和name都是window下的,所以你的this.name实际就得到的是window.name咯。
------解决方案--------------------js。。真心没学好
------解决方案--------------------alert(object.getNameFunc()())是在当前窗口运行的,所以this 指的是外部的name.
------解决方案--------------------object和之前的name是同级的,this是他们的上一级。所以this.name返回是The Window。
如果object本身是个function(),那么this就是object,this.name返回的就是My Object。
------解决方案--------------------var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
return function(){
return this.name;
};
}
};
alert(object.getNameFunc()); //The Window
alert(object.getNameFunc().call(object,object.getNameFunc())); //The Object
------解决方案--------------------getNameFunc : function(){//这个函数才是闭包的函数
return function(){//这个直接定义的function是window的所以你是的到The Window
return this.name;
};
}
你要得到闭包的My Object就不要中间的那个function
getNameFunc: function() {
return this.name;
}
你试试这样是不是就可以了