首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

js 闭包 思考题 求好手解释

2013-04-09 
js 闭包 思考题 求高手解释Js代码   var name The Window   var object {     name : My Object,

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

热点排行