IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

des variables globales


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Septembre 2009
    Messages : 23
    Par défaut des variables globales
    Bonjour,

    Quelques fois j'ai besoin des mêmes variables javascript d'une portion de code à un autre. Jusqu'à présent je me débrouillais pour appeler ces variables dans le header pour qu'elles soit disponibles pour tous mes futurs scripts etc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <script type="text/javascript">
    var MaPremiereVar = '1';
    var MaDeuxiemeVar = '2';
    </script>
     
    //ailleurs dans ma page html
    <script type="text/javascript">
    //...
    alert(MaPremiereVar);
    //...
    </script>
    Je n'aime pas vraiment laisser trainer des variables globales comme ça. Je me demandais si un script, via l'attribut src, n'était pas capable de recevoir une ou plusieurs variables comme une url classique avec des paramètres :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    <script type="text/javascript" src="alert.js?MaPremiereVar='1'MaDeuxiemeVar='2'"></script>
    Ma question concerne vraiment un fichier javascript. Je sais que je pourrais appeler un script php(ou autre) dans l'attribut src mais je me demandais si js en était capable seul.

    Si ce n'est pas possible, les espaces de nommage sont ils la seule solution pour éviter de propager des variables dans tous les sens?

    Jusqu'à présent je n'ai jamais eu de problème avec cette manière de faire (ie. les variables globales), mais je sens que ce n'est pas la plus fiable et la plus lisible.

  2. #2
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 684
    Par défaut
    mettons que tu définisses tes variables en arguments d'un src: quel est le profit? en quoi est-ce plus propre / efficace?

    bref, si tes variables globales sont sensées, pesées, très utiles dans ton code, si possible transparentes pour un utilisateur autre que toi, utilise-les!

  3. #3
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 207
    Par défaut
    Je n'aime pas vraiment laisser trainer des variables globales comme ça.
    - tu peux créer un namespace, c'est considéré comme le plus clean...

    - sinon sur le onload du document tu récupères les balises script et leur href src que tu traites pour récupérer les paramètres passe comme tu le ferais avec une url normal, ça fait classe...et on ne touche pas au code initial...

    - sinon comme tu continues comme tu le fais...

  4. #4
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 418
    Par défaut
    Disons qu'il faut éviter de multiplier les variables globales car le risque de collision augmente en fonction du nombre de scripts que tu appelle et qui les utilise.

    C'est assez souvent possible de limiter leur nombre ainsi que le nombre de fonctions accessibles depuis l'extérieur.

    Un article sur le sujet ici

  5. #5
    Inactif  

    Profil pro
    Inscrit en
    Mai 2010
    Messages
    345
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 345
    Par défaut
    L'utilisation de variable globale montre surtout un problème d'organisation et de niveau en programmation Javascript.

    Je m'explique :

    souvent on va trouverdes morceau de variables déclarées en global, et juste après une fonction sans paramètres qui viendra utiliser ces variables.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    var mavar1 = 1;
    var mavar2 = 2;
    function codemoche() {
       alert(mavar1);
    }
     
     
    window.onload = codemoche;
    Alors qu'on pourrait très bien utiliser des paramètres dans la fonction.

    Le mieux est d'essayer plutôt de faire des objets qu'on instancie ensuite via des paramètres. C'est plus propre et plus réutilisable.

  6. #6
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 207
    Par défaut
    code tout aussi "moche" mais plus acceptable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function global( var1, var2){
      this.mavar1 = var1 ? var1:"undefined";
      this.mavar2 = var2 ? var2:"undefined";
      this.codemoche = function () {
        alert( this.mavar1 +'\n'+ this.mavar2);
      }
    };
    var go = new global("param #1", "param #2");
    go.codemoche();
    Citation Envoyé par dukej
    L'utilisation de variable globale montre surtout un problème d'organisation et de niveau en programmation Javascript.
    tout à fait vrai mais il peut arriver qu'il n'y ai pas de suite dans les appels de fonction autorisant les passages successifs en paramètre, de données à traiter.
    exemple
    Mise à jour de variables dans un contexte puis utilisation de celles ci dans un autre contexte.

    Certes tu me diras qu'il est donc temps d'instancier un objet, et manipuler celui ci, et là tu as raison.

    Citation Envoyé par ABCIWEB
    Un article sur le sujet ici
    lecture incontournable...

  7. #7
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    déjà breuk les variables globales
    voir les post sur les namespaces pour faire propre.

    ensuite pour le script qui prend des param dans l'url
    Oui c'est possible.
    mais pas simple
    il faut faire plusieurs chose
    lorsque tu inclus ton script tu mets un onload
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <script 
       type="text/javascript" 
       src="varscript.js?maPremiereVar='1'&maDeuxiemeVar='2'"
       onload='initVars(this)'></script>
    lorsque le fichier sera chargé le navigateur va définir un élément script puis il va parser et charger le contenu du script
    et ensuite il va exécuter la méthode iniVars

    il faut donc définir la méthodes initVars dans le script
    dans cette méthode le paramètre sera l'élément script lui-même.
    tu pourras donc récupérer la chaine src de l'URL du script
    et ainsi récupérer les variables et leur valeur
    à toi alors de les mettre dans un namspace pour les utiliser en suites.
    A+JYT

Discussions similaires

  1. [C#] Peut-on avoir des variables globales ?
    Par Seth77 dans le forum C#
    Réponses: 7
    Dernier message: 10/09/2006, 16h07
  2. comment faire des variables globales
    Par user_ensias dans le forum Struts 1
    Réponses: 3
    Dernier message: 07/09/2006, 10h03
  3. portée des variables globales dans un fichier js
    Par crakazoid dans le forum Général JavaScript
    Réponses: 19
    Dernier message: 14/04/2006, 16h49
  4. utilisation des variables global dans tout le projet
    Par EYENGA Joël dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 12/01/2006, 10h55
  5. De la bonne pratique des variables globales...
    Par say dans le forum C++Builder
    Réponses: 9
    Dernier message: 25/11/2005, 09h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo