如何从闭包范围动态访问局部变量(通过其名称的字符串形式)?

Ste*_*ven 5 javascript closures

在 Javascript 中,我习惯于通过使用[]操作符来“动态”访问已知命名空间中的变量(如果我在这里使用了错误的词,请纠正我)。例如(来自全局命名空间):

var a = 1;
window['a']; # => 1
Run Code Online (Sandbox Code Playgroud)

或者来自对象类型命名空间:

var a = { b: 1 };
a['b']; # => 1
Run Code Online (Sandbox Code Playgroud)

我熟悉如何this确定的基础知识:

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

但是在函数本身内,我如何访问我刚刚实例化(或重新定义)的局部变量var

即,我希望以下函数调用返回1调用a

function(){
  var a = 1;
  return a;
}
Run Code Online (Sandbox Code Playgroud)

你不能使用,window['a']因为a是在本地定义的,你不能使用,this['a']因为this根据调用函数的上下文而改变。

在现实环境中,我会简单地重构以避免动态创建和访问局部变量,因为这通常是一个坏主意,但作为一个学术问题,我很好奇是否可以a通过其字符串名称进行访问。

jmb*_*all 3

您将局部变量(不是对象的属性)与属性(不是局部变量)混合在一起。你的问题没有答案,或者更确切地说,答案是“这是不可能的”。