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

js闭包有关问题

2012-06-16 
js闭包问题JScript codefunction test111(){var name The Window   var object {     name : My O

js闭包问题

JScript code
function test111(){var name = "The Window";   var object = {     name : "My Object",     getNameFunc : function(){       return function(){         return this.name;      };     } }; alert(object.getNameFunc()()); //The Window}


这是我在网上看的闭包的讲解,但是我自己试的时候alert根本什么都没有输出,如果我写错了,那么正确的写法是什么呢?如果按正确的方法能够输出 The Window,但是我还是觉得应该输出 My Object啊,高手给解释一下这段代码!!!

[解决办法]
不要外面的test111
JScript code
var name = "The Window"; //等效于:window.name="The Window"  var object = {     name : "My Object",     getNameFunc : function(){       return function(){         return this.name; //这个例子的意思是:this是指向window,而不是var object.     };     } }; alert(object.getNameFunc()()); //The Window//上面的alert这样写容易理解一点:var f1 = object.getNameFunc();        var content =f1(); //这里f1是函数function(){ return this.name },谁调用f1,this指向谁,那就是window咯        alert(content);
[解决办法]
第一個name是一個局部變量,不是window對象的屬性,別搞錯了。
第二個name是object對象的屬性,不是window對象的,你輸出的this 是指向window對象的,你在return this.name;前面alert(this==window);
[解决办法]
var name = "The Window"; 

function test111(){
  var object = { 
    name : "My Object", 
    getNameFunc : function(){ 
      return function(){ 
        return this.name; 
     }; 
    } 
}; 
alert(object.getNameFunc()()); //The Window
}
test111()
[解决办法]
一个简单的js闭包:
JScript code
function a(){  var i=0;  function b(){    alert(++i);  }    return b;}var c = a();c(); 

热点排行