web-dev-qa-db-fra.com

Déclarer une variable Javascript deux fois dans la même portée - Est-ce un problème?

Le code suivant poserait-il des problèmes ?:

var a = 1;
var a = 2;

Je crois comprendre que les variables javascript sont déclarées au début de la portée. Par exemple:

var foo = 'a';
foo = 'b';
var bar = 'c';

Est traité comme:

var foo;
var bar;
foo = 'a';
foo = 'b';
bar = 'c';

Par conséquent, mon extrait de code initial deviendrait-il:

var a;
a = 1;
a = 2;

Ou deviendrait-il:

var a;
var a;
a = 1;
a = 2;

Je comprends que déclarer deux fois une variable javascript dans la même étendue n’est pas une bonne pratique, mais je suis plus intéressé par l’impact de cette opération.

26
Curt

Comme vous l'avez dit, par deux ou plus de la même variable, JavaScript déplace cette déclaration en haut de la portée et votre code devient ainsi:

var a;
a = 1;
a = 2;

Par conséquent, cela ne nous donne aucune erreur.

Ce même problème se produit avec les boucles for (elles n'ont pas de portée locale dans leurs en-têtes), le code ci-dessous est donc très courant:

for (var i = 0; i < n; i++) {
    // ...
}
for (var i = 0; i < m; i++) {
    // ...
}

C'est pourquoi les gourous JavaScript comme Douglas Crockford suggèrent aux programmeurs de déplacer manuellement ces déclarations en haut de la portée:

var i;    // declare here
for (i = 0; i < n; i++) {    // initialize here...
    // ...
}
for (i = 0; i < m; i++) {    // ... and here
    // ...
}
33
Danilo Valente

Déclarer deux fois la même variable revient à le déclarer une fois. La déclaration ci-dessous n'aura aucun impact.

var a, a;

dans le cas ci-dessous, vous remplacez simplement la variable foo. Cela aura un impact si vous avez défini foo dans les portées locale et globale. JS recherchera d'abord foo dans la portée locale et ensuite, s'il ne trouve pas, il cherchera dans la portée globale.

var foo;
var bar;
foo = 'a';
foo = 'b';
bar = 'c';
3
Abhidev

Une telle déclaration de variable en double ne posera pas de problème grâce à la fonction de levage de variables javascript. Ainsi, dans votre DOM, où que vous ayez déclaré des variables mais assignées (ou) non affectées, elles seront placées en haut de la liste lors de la compilation.

Example:
    var foo='hai!';
    bar='welcome!';
    var bar;

Vous pouvez vous attendre que l'extrait de code ci-dessus devrait générer une erreur "non identifiée", mais javascript le gère en plaçant la déclaration de la variable barre en haut. Ainsi, même avant la déclaration d'une variable, sa valeur peut être affectée par opposition à d'autres langues.

J'espère que cela vous aide dans une certaine mesure

0
sridhargiri