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();