Variable globale javascript [Fermé]

Signaler
Messages postés
56
Date d'inscription
jeudi 11 octobre 2007
Statut
Membre
Dernière intervention
11 décembre 2009
-
 bilal -
Bonjour,
Je voudrais savoir comment est ce qu'on peut faire pour declarer une variable globale, et comment on peut y acceder durant toute notre connexion ... ( comme $_SESSION en PHP ) ...
moi j'ai declaré une variable globale dans un script,et quand je l'appelle à partir d'un autre script, ça marche pas il me dit que ma variable n'est pas definie ...
en fait c'est un peu bizarre mon truc parce que dans le script j'ai deux variable globale :

tableauJS = new array()
i=0;

tableauJS marche nickel aucun probleme, j'y accede partout mais le probleme c'est ma variable i ...
c'est un peu louche non ?
Merci d'avance

10 réponses

Messages postés
682
Date d'inscription
vendredi 1 août 2008
Statut
Membre
Dernière intervention
28 juin 2015
181
Salut,
dans tous les cas, si tu déclares une variable sans var, elle sera globale.
Autrement, si tu déclares une variable avec var, elle est locale au bloc dans lequel elle est déclarée, ex. :
function foo() {
    var n;
    // ...
}

n sera locale à la fonction foo. Si tu utilises var à la "racine" de ton script, elle est en fait locale à window, ce qui est équivalent à globale.

Ton problème vient, je pense, d'un changement de portée. Par exemple :
i = 7;
function change() {
    var i = 5;
    // ici i == 5
}
// ici i == 7

Lorsque tu testes ton i, tu es peut-être à un niveau où il a été redéfini.
Ou inversement, il a été défini dans un niveau qui n'est plus accessible :
function def() {
    var i = 11;
}
alert(i); // ici, i n'est plus à portée


En tout cas, j'ai fait des tests avec un tableau, déclaré avec ou sans new, ça ne change rien. Ce n'est pas parce que c'est un tableau qu'il est "plus facilement" global.

Refais tes tests, et donne-moi des nouvelles ;)
27
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 79822 internautes nous ont dit merci ce mois-ci

Messages postés
682
Date d'inscription
vendredi 1 août 2008
Statut
Membre
Dernière intervention
28 juin 2015
181
Eh bien, c'est la "zone", ou encore la "portée" de la variable, son "degré de localité". Je ne sais pas comment l'expliquer bien … Petit schéma :
// niveau global
function machin () {
	// niveau de la fonction machin
	var a;
	while (...) {
		// niveau de la boucle while
		var b;
	}
}

Une variable locale à un niveau n'est pas visible au niveau supérieur, par exemple ici a n'est pas visible depuis le niveau global, et b n'est visible ni par le niveau machin ni par le niveau global.

Regarde ceci : http://performance.survol.fr/2008/05/portee-des-variables-javascript/

;)
Les variables déclarées tout au début du script, en dehors et avant toutes fonctions (voir plus loin...), seront
toujours globales, qu'elles soient déclarées avec var ou de façon contextuelle. On pourra donc les exploiter
partout dans le script.
Dans une fonction, une variable déclarée par le mot clé var aura une portée limitée à cette seule fonction. On ne
pourra donc pas l'exploiter ailleurs dans le script. D'où son nom de locale. Par contre, toujours dans une
fonction, si la variable est déclarée contextuellement (sans utiliser le mot var), sa portée sera globale.
Nous reviendrons sur tout ceci dans l'étude des fonctions.
Messages postés
682
Date d'inscription
vendredi 1 août 2008
Statut
Membre
Dernière intervention
28 juin 2015
181
Bof … moi j'ai jamais recours aux cookies, je trouve ça trop instable. Les sessions PHP ont été conçues pour faciliter le passage des données entre les pages, autant s'en servir !
Et là l'argument est d'autant plus fort que JavaScript ne sert vraiment pas à ça.

Ça te simplifiera la vie, tu verras ;)
on peut utiliser un hidden input, qu'on peut modifier la valeur par javascript.
la valeur de ce variable sera globale
Messages postés
56
Date d'inscription
jeudi 11 octobre 2007
Statut
Membre
Dernière intervention
11 décembre 2009
2
salut groarh !!

>>Lorsque tu testes ton i, tu es peut-être à un niveau où il a été redéfini.
>>Ou inversement, il a été défini dans un niveau qui n'est plus accessible :

tu veux dire quoi par le terme "niveau" ?
Messages postés
56
Date d'inscription
jeudi 11 octobre 2007
Statut
Membre
Dernière intervention
11 décembre 2009
2
oui cela je l'avais compri mais je parlais par rapport à mon code ...
je vais essayer de mieux expliquer mon code :

alors j'ai une page accueil.php (faites pas attention à la syntaxe0) :

<html xmlns="http://www.w3.org/1999/xhtml">
<head></head>
<script language="javascript">
i=0;
tableau= new array();

function charger(para){
i=para;
grace à cette fonction je met des valeur dans ma page ( grace à document.getElementById
) les données sont enregistré dans la variable tableau que j'ai alimenter avec une autre fonction ...
(cela marche tres bien ... )
}
function recuperer(repertoire){
repertoire = tableau[i][3]; // tableau[i][3] contien la valeur de mon repertoire
return repertoire;
}

</script>
<body>
....
<?php
switch($_GET['lien']){
case "abum":
include("album.php");
break;
case "galerie":
include("galerie.php");
break;

}
?>
....
</body>

qd je suis sur la page "accueil.php?lien=galerie" (c'est toujours la mm page mais dans body je charge galerie.php) j'ai un lien :

<a href="accueil.php?lien=">lien</a>

dans ma page
"accueil.php?lien=album" j'ai
<?php
echo "<scripte language="javascript">"
echo "repertoire = recuperer(repertoire);";
echo "</script>";
?>
<body onLoad(charger(para))>
// le parametre para incremente ou decremente grace à des fonction javascript qui marche bien
....
....
</body>

voila voila j'espere que j'etais clair si vous ne comprenez pas vous me dites ... merci d'avance
Messages postés
682
Date d'inscription
vendredi 1 août 2008
Statut
Membre
Dernière intervention
28 juin 2015
181
Je crois que j'ai compris : à un moment tu recharges ta page avec une requête GET. À ce moment là, peu importe que ce soit la même page, il y a rechargement, donc toutes tes variables disparaissent.
Messages postés
56
Date d'inscription
jeudi 11 octobre 2007
Statut
Membre
Dernière intervention
11 décembre 2009
2
est ce que tu sur que c'est à cause de ça ? et si c'est le cas ... comment est ce que je peux faire pour recuperer une donnée qd on recharge la page ? j'ai deja pensé à utiliser les coukies mais je sais pas c'est une bonne technique ...
Merci pour ton aide
Messages postés
56
Date d'inscription
jeudi 11 octobre 2007
Statut
Membre
Dernière intervention
11 décembre 2009
2
salut tout le monde !!!
j'ai utilisé les cookies et ça matche nickel ... je sais pas si c'est propre ( techniquement parlant ) mais en tout cas ça marche ...