2010-07-30 4 views
5

J'essaie de passer une référence à une variable puis de mettre à jour le contenu en javascript, est-ce possible? Par exemple un exemple simple (échec) serait ...Accéder à une variable par référence en Javascript

var globalVar = 2; 

function storeThis (target, value) { 
    eval(target) = value; 
} 

storeThis('globalVar', 5); 
alert('globalVar now equals ' + globalVar); 

Ceci bien sûr ne fonctionne pas, quelqu'un peut-il aider?

Répondre

4

Eval ne renvoie pas de valeur.

Cela fonctionne:

window[target] = value; 

(cependant, vous ne passent pas la référence, vous passez le nom de la variable)

+0

digitalfresh est juste, eval est pour l'évaluation de la déclaration que vous nee probablement d pour en créer un, par exemple eval ("window." + target + "=" + value + ";"); mais becaref de trop de récursion. – Ifi

+0

Oui, mais pourquoi 'eval' du tout? Ce n'est certainement pas l'une des rares situations où 'eval' est approprié. – jasongetsdown

+0

Bingo! Merci à vous deux LFI et DigitalFresh, qui a travaillé un régal. –

3

Dans ce cas, le code storeThis a déjà accès à globalVar si il n'y a pas besoin de passer dans

Votre échantillon est identique à:.

var globalVar = 2; 

function storeThis(value) { 
    globalVar = value; 
} 

storeThis(5); 

Qu'essayez-vous exactement de faire?

Les scalaires ne peuvent pas être transmis par référence en javascript. Si vous devez faire soit utiliser le Number type ou créer votre propre objet comme:

var myObj = { foo: 2 }; 
1

La meilleure façon est d'utiliser un objet, comme on peut le voir here ou here , ou here

2

Si vous voulez vraiment utiliser eval, vous pouvez utiliser les éléments suivants:

var globalVar = 2;

function storeThis(target, value) { 
    eval(target + ' = ' + value); 
} 

storeThis('globalVar', 5); 
alert('globalVar now equals ' + globalVar); 

+0

Dans ce cas, si 'value' est une chaîne, le' eval() 'la traitera comme une variable (s'il s'agit d'un mot), un code invalide (si le javascript ne comprend pas plus d'un mot) ou un expression (si c'est une expression javascript valide). –

Questions connexes