如何访问动态局部变量

Gar*_*ary 5 javascript variables scope dynamic local-variables

我如何引用动态局部变量?使用全局变量很容易实现:

myPet = "dog";  
console.log(window["myPet"]);
Run Code Online (Sandbox Code Playgroud)

我如何在本地范围内做同样的事情?


特别是我正在尝试做的事情:

myArray = [100,500,200,800];  
a = 1; // Array index (operand 1)  
b = 2; // Array index (operand 2)  
Run Code Online (Sandbox Code Playgroud)

根据具体情况,我想评估<b或b <a

  • 为此,我设置了两个变量:compare1compare2
  • compare1将引用ab,compare2将引用另一个
  • 评估compare1 < compare2或反之亦然

以下与全局变量完美配合. 但是,我希望ab是本地的.

compare1 = "b"; compare2 = "a";  
for(a=0; a<myArray.length; a++){  
  b = a+1;  
  while(b>=0 && myArray[window[compare1]] < myArray[[compare2]]){    
    /* Do something; */
    b--;  
  }
}  
Run Code Online (Sandbox Code Playgroud)

如果在上面我设置compare1=a那么我将不得不重新设置比较1,每次一个改变.相反,我希望真正[查看/点]的值一个.

Que*_*tin 4

使用对象而不是一组单独的变量。(我无法想象现实世界中您想要使用动态命名的变量,但它不属于一组逻辑相关的变量)。

var animals = { dog: "Rover", cat: "Flopsy", goldfish: "Killer" };
var which = 'dog';
alert(animals[which]);
Run Code Online (Sandbox Code Playgroud)

  • 局部变量将添加到为您输入的每个函数创建的“激活对象”中。据我所知,没有办法访问激活对象来动态访问其成员。--- Dmitry Soshnikov 对 ECMAScript 的内部结构进行了大量的探索并撰写了很好的文章。这是他写的一篇文章,讨论 AO 的工作原理。阅读本文应该让您确定是否有办法:http://dmitrysoshnikov.com/ecmascript/chapter-2-variable-object/#variable-object-in-function-context (2认同)