J'ai ce code:
if ( something is true ) {
var someVar = true;
} else {
var someVar = false;
}
JsHint dit que "someVar a déjà été défini" sur la partie instruction else. Pourquoi est-ce et comment le résoudre?
Merci
Les variables JS n'ont pas de portée de bloc, elles ont une portée de "fonction" (ou parfois globale).
La déclaration (mais pas l'affectation) est "hissée" en haut de la fonction.
jshint vous avertit que vous avez deux déclarations de ce type - votre code est équivalent à:
var someVar;
var someVar; // warning!
if (something) {
someVar = true;
} else {
someVar = false;
}
Cela est dû au levage.
En javascript, peu importe où vous définissez une nouvelle variable avec var
, il la déplace vers le haut de la fonction dans laquelle vous vous trouvez. Votre code produit ce qui suit au-dessus de votre bloc if en haut de la fonction:
var someVar;
var someVar;
Voici un tutoriel pour expliquer le levage:
http://net.tutsplus.com/tutorials/javascript-ajax/quick-tip-javascript-hoisting-explained/
Vous ne devez pas placer de déclarations var
à ces endroits. Placez la déclaration var
avant le if
, puis définissez simplement "someVar" sur une valeur.
En effet, ici, vous n'avez absolument pas besoin d'une instruction if
:
var someVar = !!(something);
fera la même chose. (La double application de !
garantit que "someVar" est défini sur true
ou false
, en fonction de la "véracité" de something
.)