Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript
JavaScript Forum programmation JavaScript. Lire : Cours JavaScript, FAQ JavaScript, Toutes les FAQ JavaScript et Sources JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/02/2011, 18h33   #1
Invité de passage
 
Homme
Développeur Java
Inscription : septembre 2009
Messages : 13
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 : 13
Points : 3
Points : 3
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 :
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 :
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.
herotic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2011, 18h39   #2
Expert Confirmé
 
Avatar de javatwister
 
Homme
danseur
Inscription : août 2003
Messages : 2 667
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Calvados (Basse Normandie)

Informations professionnelles :
Activité : danseur

Informations forums :
Inscription : août 2003
Messages : 2 667
Points : 3 035
Points : 3 035
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!
javatwister est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2011, 19h26   #3
Modérateur
 
Avatar de NoSmoking
 
Homme
Inscription : janvier 2011
Messages : 2 930
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Isère (Rhône Alpes)

Informations forums :
Inscription : janvier 2011
Messages : 2 930
Points : 4 744
Points : 4 744
Citation:
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...
NoSmoking est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2011, 19h50   #4
Membre Expert
 
Inscription : septembre 2010
Messages : 1 239
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 1 239
Points : 1 561
Points : 1 561
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
__________________
- Réalisations
- Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical.
ABCIWEB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2011, 22h53   #5
Membre expérimenté
 
Duke Jikel
Inscription : mai 2010
Messages : 340
Détails du profil
Informations personnelles :
Nom : Duke Jikel

Informations forums :
Inscription : mai 2010
Messages : 340
Points : 548
Points : 548
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 :
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.
dukej est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/02/2011, 14h45   #6
Modérateur
 
Avatar de NoSmoking
 
Homme
Inscription : janvier 2011
Messages : 2 930
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Isère (Rhône Alpes)

Informations forums :
Inscription : janvier 2011
Messages : 2 930
Points : 4 744
Points : 4 744
code tout aussi "moche" mais plus acceptable
Code :
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...
NoSmoking est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/02/2011, 15h12   #7
Expert Confirmé
 
Avatar de sekaijin
 
Femme
Urbaniste
Inscription : juillet 2004
Messages : 1 419
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 48
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Urbaniste
Secteur : Santé

Informations forums :
Inscription : juillet 2004
Messages : 1 419
Points : 2 806
Points : 2 806
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 :
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
sekaijin est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h04.


 
 
 
 
Partenaires

Hébergement Web