2014-10-31 65 views
0

我想了解JavaScript中的關閉。閉包是函數的局部變量 - 在函數返回後保持活動[reference]。Javascript關閉 - 父功能

在很多參考文獻中,我看到他們在描述函數的關閉時考慮了父函數。但根據下面的例子中,我認爲一個功能,可以在父功能訪問不僅是變量,而且在盛大的父母及以上..

有人可以解釋,如果我認爲是正確與否? 預先感謝您..

test1 = function() { 
    var x = 10; 
    return function(){ 
    alert(++x); 
    }; 
} 

test2 = function() { 
    var x = 10; 
    return function(){ 
    return function(){ 
     alert(++x); 
    } 
    }; 
} 

t1 = test1(); 
t1(); //11 
t1(); //12 
t2 = test2()(); 
t2(); //11 
t2(); //12 
+1

我想你錯過了'test1'頂部的一些代碼 – 2014-10-31 13:38:50

+2

如果一個父函數可以訪問一個變量,那麼孩子也可以。它不依賴* * immediate * parent中明確定義的變量。 – 2014-10-31 13:39:07

+1

這裏唯一重要的是變量的範圍(變量被定義的地方)。您可以像定義變量一樣訪問最高級別。 – 2014-10-31 13:41:03

回答

1

是,每個範圍先後獲得其父的範圍,這是一個傳遞關係 - 當你的父母範圍可以從你的祖父母訪問的變量,你可以訪問的變量從你的父母那裏,那麼你也可以訪問你的祖父母(及其父母)的人。