天天看點

從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的上下文

繼續閱讀