日期:2014-05-17  浏览次数:20748 次

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;  
}
你试试这样是不是就可以了