天天看点

从javascript的两个例子谈开

今天是研究javascript的闭包问题,看到这么一个非常好的文章

<a href="http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html?20110419152835">http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html?20110419152835</a>

文章最后留了两个题目:

如果你能理解下面两段代码的运行结果,应该就算理解闭包的运行机制了。

代码片段一。

var name = "the window";

var object = { 

name : "my object",

getnamefunc : function(){ 

return function(){ 

return this.name; 

};

}

alert(object.getnamefunc()());

代码片段二。

var that = this; 

return that.name; 

这两个例子相当精简

这里记录下对这两个例子的理解:

理解最后两个例子:

1 函数中的this指的是调用这个函数的owner 

2 object.getnamefunc()是返回一个函数,并没有执行函数中的代码 

3 增加一个例子0: 

var name = "the window"; 

name : "my object", 

return (this.name); 

}; 

var name = object.getnamefunc(); 

alert(name);

4 把例子1变成 

return this.name; //这个this是有上下文的限制的 

var tmp = object.getnamefunc(); //此时没有执行this.name 

var name = tmp();//这个时候才执行,这时候的this上下文为全局 

alert(name); 

//alert(object.getnamefunc()())

5 把例子2变成: 

var tmp = object.getnamefunc(); //这个时候执行了that = this,这里的this上下文是object,所以that指的是object 

var name = object.getnamefunc(); //这个时候执行了that.name 

//alert(object.getnamefunc()());

这里面最难理解的应该是this的上下文

继续阅读