2011-02-23 53 views
3

在Javascript中,我習慣於通過使用[]運算符來「動態地」訪問已知命名空間內的變量(如果我在這裏使用了錯誤的單詞,請糾正我)。例如(從全局命名空間):如何從閉包範圍動態訪問本地變量(通過其名稱的字符串形式)?

var a = 1; 
window['a']; # => 1 

或從對象類型命名空間:

var a = { b: 1 }; 
a['b']; # => 1 

而且我熟悉如何this確定的基本知識:

var a = function(){ return this['c']; }; 
var b = { c: 1 }; 
a.apply(b); # => 1; 

但是在函數本身中,我如何訪問我剛剛使用var實例化(或重新定義)的局部變量?

也就是說,我想下面的函數調用返回1沒有調用a

function(){ 
    var a = 1; 
    return a; 
} 

不能使用window['a']因爲a在本地定義,而不能使用this['a']因爲this根據調用函數的上下文而變化。

在一個現實的環境中,我只是簡單地重構,以避免動態創建和訪問局部變量,因爲無論如何它通常是一個壞主意,但作爲一個學術問題,我很好奇是否有可能通過它訪問a字符串名稱。

+2

請參閱http://stackoverflow.com/questions/598878/how-can-i-access-local-scope-dynamically-in-javascript和http://stackoverflow.com/questions/2336508/javascript-get-訪問本地變量或變量在閉包的名稱和http://stackoverflow.com/questions/1119335/javascript-local-variable-declare – 2011-02-23 18:04:14

回答

3

你在混合局部變量(不是對象的屬性)和屬性(不是局部變量)。你的問題沒有答案,或者說,答案是「不能做」。

相關問題