Javascript:通过名称访问闭包中的局部变量或变量

Ben*_*ton 14 javascript variables closures function local

可能重复:
如何在javascript中动态访问本地范围?

大家好.
我们都知道您可以使用[]语法通过它的名称访问javascript对象的属性.例如ob ['nameOfProperty'].

你能为局部变量做同样的事吗?这里的另一个答案表明答案是使用window ['nameOfVar'].然而,这只适用于海报,因为他在窗口级范围内定义变量.

我认为这通常是可能的,因为Firefox的Firebug(我认为是用javascript编写的)可以显示本地和闭包变量.是否有一些我不知道的隐藏语言功能?

具体来说,这就是我想要做的事情:

 var i = 4;
 console.log(window['i']); // this works..

 function Func(){
     var j = 99;

     // try to output the value of j from its name as a string
     console.log(window['j']); // unsurprisingly, this doesn't work
 }

 Func();
Run Code Online (Sandbox Code Playgroud)

Bob*_*Bob 13

我不知道JavaScript内置任何引用类似的局部变量(尽管可能应该考虑所有变量都由字符串内部引用).

如果你真的需要通过字符串访问,我建议将所有变量保存在一个对象中:

var variables = {
    "j": 1
};
alert(variables["j"]);
Run Code Online (Sandbox Code Playgroud)

更新:有点不好意思,没有办法像你想要的那样做.在内部,变量是声明性环境记录中的可变绑定.属性通过对象的环境记录绑定到它们是属性的对象,但实际上有一种方法可以使用括号来访问它们.不幸的是,没有办法以相同的方式访问声明性环境记录.


Pan*_*nek 7

使用窗口或任何其他全局访问器访问变量将不起作用,因为该变量不可全局访问.但您可以使用eval来评估任何表达式:

<script>
function test(){
   var j = 1; 
   alert(eval("j"));
}

test();
</script>
Run Code Online (Sandbox Code Playgroud)