Как получить доступ к динамическим локальным переменным - PullRequest
5 голосов
/ 29 апреля 2011

Как бы я ссылался на динамическую локальную переменную? Это легко сделать с помощью глобальной переменной:

myPet = "dog";  
console.log(window["myPet"]);

Как бы я сделал то же самое в локальной области?


В частности, что я пытаюсь сделать:

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

В зависимости от ситуации я хочу оценить a

  • Для этого я установил две переменные: Сравнить1 и Сравнить2
  • Compare1 будет ссылаться либо a или b , а Compare2 будет ссылаться на другое
  • Оценить сравнить1 <<em> сравнить2 или наоборот

Следующее прекрасно работает с глобальными переменными. Однако я хочу, чтобы a и b были локальными.

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--;  
  }
}  

Если в приведенном выше примере я установлю compare1=a, тогда мне придется сбрасывать сравнить1 каждый раз, когда a изменяется. Вместо этого я хочу на самом деле [посмотреть / указать] на значение a .

Ответы [ 3 ]

4 голосов
/ 29 апреля 2011

Вместо этого используйте объект вместо набора отдельных переменных. (Я не могу представить себе реальную ситуацию, когда вы захотите использовать переменную с динамическим именем, когда она не входит в группу логически связанных переменных).

var animals = { dog: "Rover", cat: "Flopsy", goldfish: "Killer" };
var which = 'dog';
alert(animals[which]);
1 голос
/ 29 апреля 2011

Вы можете сделать это с помощью eval, однако использование eval крайне не рекомендуется. Если бы вы могли повлиять на ваши потребности в рекомендации Дэвида Дорварда, я бы сделал это:

var myPet = 'dog';
var dog = 'fido';

eval("alert(" + myPet + ")");  // alerts "fido"
1 голос
/ 29 апреля 2011

вы можете ссылаться на локальную переменную глобально, если она возвращается функцией.

function dog(name) {

  var local = name;

  return local;

}

myPet = dog('spike');

alert(myPet);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...