2011-10-25 3 views
1

Je suis un novice en programmation javascript et j'aurais vraiment besoin d'aide/conseil.Préserver les variables dans une fonction de fermeture de javascript

Ce que je suis en train de faire: J'ai une fonction (ou objet ?!) qui ressemble à ceci:

var svgInteraction = function (containerId) { 
    var svgNamespace = "http://www.w3.org/2000/svg", 
     htmlns = "http://www.w3.org/1999/xhtml", 
    mathns = "http://www.w3.org/1998/Math/MathML"; 

    svgInteractions = {}; 

    svgInteractions[containerId] = "I am " + containerId; 
    console.log(svgInteractions); 

    return function() { 
     console.log(svgInteractions); 
    } 
}; 

i initialiser une variable comme ceci:

var svg1 = svgInteraction("container_1"); 
var svg2 = svgInteraction("container_2"); 

Le problème est que, pour chaque initialisation de svgInteraction, les objets svgInteractions se réinitialisent.

Il produit:

Object { container_1="I am container_1"} 
Object { container_2="I am container_2"} 

Est-il possible de conserver les anciennes valeurs à l'intérieur?

Merci

Répondre

1

Ne réglez pas à un objet vide à chaque fois (svgInteractions = {}) la fonction est appelée.

Try this ...

var svgInteraction = (function() { 

    var svgInteractions = {}; 

    return function(containerId) { 
    // Implementation 
    } 

})(); 

Ici, svgInteractions est encapsulé, mais il sera également statique pour tous les appels à svgInteraction.

+0

Je n'avais pas pensé à ce truc de fermeture. Agréable! –

+0

Merci. Tout le code d'implémentation doit être à l'intérieur de la fonction de retour droite? C'est comme un init()? Une autre question: Comment puis-je conserver des variables/fonctions indépendantes pour chaque initialisation? Par exemple, je veux qu'une autre fonction 'clic' soit exécutée en fonction du conteneur. Je pensais à quelque chose comme 'svgInteractions [containerId] .clickfunction = function() {...}' –

+0

@GavanCatalin Oui, vous avez raison. Tout ce que vous voulez être initialisé par appel doit être dans le corps de la fonction. – alex

Questions connexes