Variable globale javascript

Fermé
KaTa_TaKa Messages postés 56 Date d'inscription jeudi 11 octobre 2007 Statut Membre Dernière intervention 11 décembre 2009 - 22 janv. 2009 à 09:40
 bilal - 16 janv. 2014 à 23:54
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

Groarh Messages postés 682 Date d'inscription vendredi 1 août 2008 Statut Membre Dernière intervention 28 juin 2015 185
22 janv. 2009 à 13:00
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
Groarh Messages postés 682 Date d'inscription vendredi 1 août 2008 Statut Membre Dernière intervention 28 juin 2015 185
22 janv. 2009 à 15:58
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 : https://performance.survol.fr/2008/05/portee-des-variables-javascript/

;)
2
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.
2
Groarh Messages postés 682 Date d'inscription vendredi 1 août 2008 Statut Membre Dernière intervention 28 juin 2015 185
22 janv. 2009 à 18:33
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 ;)
1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
on peut utiliser un hidden input, qu'on peut modifier la valeur par javascript.
la valeur de ce variable sera globale
1
KaTa_TaKa Messages postés 56 Date d'inscription jeudi 11 octobre 2007 Statut Membre Dernière intervention 11 décembre 2009 2
22 janv. 2009 à 14:56
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" ?
0
KaTa_TaKa Messages postés 56 Date d'inscription jeudi 11 octobre 2007 Statut Membre Dernière intervention 11 décembre 2009 2
22 janv. 2009 à 16:01
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
0
Groarh Messages postés 682 Date d'inscription vendredi 1 août 2008 Statut Membre Dernière intervention 28 juin 2015 185
22 janv. 2009 à 16:10
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.
0
KaTa_TaKa Messages postés 56 Date d'inscription jeudi 11 octobre 2007 Statut Membre Dernière intervention 11 décembre 2009 2
22 janv. 2009 à 16:23
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
0
KaTa_TaKa Messages postés 56 Date d'inscription jeudi 11 octobre 2007 Statut Membre Dernière intervention 11 décembre 2009 2
23 janv. 2009 à 09:36
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 ...
0