2011-02-23 52 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

你在混合局部变量(不是对象的属性)和属性(不是局部变量)。你的问题没有答案,或者说,答案是“不能做”。

相关问题