web-dev-qa-db-fra.com

Redéclarer une variable javascript

Dans this tutorial, il est écrit:

If you redeclare a JavaScript variable, it will not lose its value.

Pourquoi devrais-je redéclarer une variable? Est-ce pratique dans certaines situations?

je vous remercie

39
xralf

Ce n'est rien de plus qu'un rappel que si vous faites ceci:

var x=5;
var x;
alert(x);

Le résultat sera 5.

Si vous re-déclarez une variable dans d'autres langues par exemple, le résultat sera indéfini ou NaN, mais pas en javascript.

48
ThatGuy

Vous trouverez un exemple de nouvelle déclaration d'une variable dans Google Analytics . Lorsque le code de suivi JavaScript est lancé par le script Google Analytics, il déclare ou redéclare _gaq de la manière suivante:

var _gaq = _gaq || [];

En d'autres termes, si _gaq est déjà défini, _gaq est "redéclaré" comme tel. S'il n'est pas défini, il sera déclaré pour la première fois comme un tableau vide.

Cela permet au code de suivi de Google Analytics de prendre en charge d'autres scripts pouvant nécessiter l'utilisation de la variable avant le lancement du code Google Analytics. Comme @xralf l'a fait remarquer, JavaScript le permet.

Redéclarer une variable est utile dans les situations où il est impossible de savoir si la variable a déjà été définie.

En redéclarant une variable de manière conditionnelle, comme le fait le code de suivi de Google Analytics, il permet à une variable de provenir de plusieurs emplacements en toute sécurité.

Dans cet exemple, un autre code utilisant la variable _gaq pourrait également rechercher une variable _gaq prédéfinie. S'il existe, il sait qu'il peut l'utiliser. S'il n'existe pas, il sait qu'il doit le définir avant d'essayer de l'utiliser.

36
Steve Oliver

Pourquoi devrais-je redéclarer une variable?

Tu ne devrais pas. Cela crée du code déroutant.

Est-ce pratique dans certaines situations?

Non.

20
Quentin

En javascript, il n'y a pas de portée de bloc, il est donc conseillé de redéclarer une variable à des fins de clarification. cela fait un meilleur code.

Par exemple:

for (var x=0; x< 100; x++) { }

alert(x); //In most languages, x would be out of scope here.
          //In javascript, x is still in scope.


//redeclaring a variable helps with clarification: 
var x = "hello";
alert(x);
7
George Filippakos

Il ne perd pas sa valeur à cause deLevage 

var x = 5;
var x;

// this is same as

var x; // undefined;
x = 5;

Ainsi, lorsque vous dites "Si vous redéclarez une variable JavaScript, elle ne perdra pas sa valeur". 

Comme indiqué par hissage, la ou les déclarations, toutes en haut, se déplacent vers le haut. Et ensuite la variable est assignée. 

var x = 25;
var x; // redeclare first time
var x; // redeclare second time

// is same as 

var x; // undefined
var x; // Not sure if this happens, but doesn't make a difference, it's still undefined
x = 25;

Pour ce qui est de l'aspect pratique, cela arrive parfois. Regardez la réponse de @ steveoliver. 

3
roro

En général, il peut être considéré comme mauvais d’avoir des assignations var après d’autres déclarations en raison du problème de levage ( voir ici ). En utilisant le "modèle de variable unique" ( voir ici ), les redéclarations ne peuvent se produire que dans l'exemple Google Analtyics de Steve Oliver. Je reformulerais l'exemple ci-dessus pour:

var x, max = 100; // no further var declarations afterwards!

for (x = 0; x < max; x++) { }

alert(x);

// redeclaration 'var x = "hello"' doesn't make any sense here
// and would be complained about by JSLint/-Hint 
x = 'hello';
alert(x);

Une redéclaration peut toutefois avoir un sens lorsque vous utilisez des valeurs par défaut pour des paramètres facultatifs (ce qui correspond à l'exemple de Google Analytics, je suppose):

function abc(param1) {
  var param1 = param1 || 'default value';
}
0
Felix