Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从闭包范围动态访问局部变量(通过其名称的字符串形式)?_Javascript_Closures - Fatal编程技术网

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

Javascript 如何从闭包范围动态访问局部变量(通过其名称的字符串形式)?,javascript,closures,Javascript,Closures,在Javascript中,我习惯于使用[]操作符“动态”访问已知名称空间中的变量(如果我在这里使用了错误的单词,请更正我)。例如(从全局命名空间): 或从对象类型命名空间: var a = 1; window['a']; # => 1 var a = { b: 1 }; a['b']; # => 1 我很熟悉如何确定这个的基本知识: var a = function(){ return this['c']; }; var b = { c: 1 }; a.apply(b); # =

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

或从对象类型命名空间:

var a = 1;
window['a']; # => 1
var a = { b: 1 };
a['b']; # => 1
我很熟悉如何确定这个的基本知识:

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

您正在混合局部变量(它们不是对象的属性)具有属性(不是局部变量)。你的问题没有答案,或者说,答案是“做不到”。

请参见和