首先關於閉包的理解。閉包
我的認爲,閉包是定義在局部變量的語境中,能獲取該語境中全部變量的函數。函數
摘自阮一峯博客的例子this
代碼片斷一。get
var name = "The Window";博客
var object = {
name : "My Object",iogetNameFunc : function(){
return function(){
return this.name;
};function}匿名函數
};變量
alert(object.getNameFunc()());object
代碼片斷二。
var name = "The Window";
var object = {
name : "My Object",getNameFunc : function(){
var that = this;
return function(){
return that.name;
};}
};
alert(object.getNameFunc()());
第一個例子輸出"The Window"; 第二個例子輸出 "My Object"
下面分析一下兩個例子的不一樣之處,首先理解this是代碼被執行時的環境 第一個例子中執行的是全局的this 第二個例子執行的是object的this
換句話說,第一個例子之因此輸出"The Window" 是由於object裏面的代碼徹底沒有被執行
其實很容易理解,第一個例子中object.getNameFunc()返回的是匿名函數,這個函數中沒有使用object的變量 因此並不屬於object的成員 於是是全局的成員 因此返回的this就是全局的this
第二個例子中,var that = this;發生在object的語境中,因此返回的是object的this