Première question: l'OMI, en utilisant une affectation à la condition de la déclaration if
, pourrait causer de la confusion, même si myVar
n'est pas déclaré précédemment avec la déclaration var
il pourrait devenir une variable globale.
Deuxième question: Non, vous n'êtes pas re-declaringY
une seconde fois, en fait Y
est défini avant toute cession, il est hissée au sommet de sa portée englobante.
Voici comment fait var
se comporte dans votre code:
var Y; // declared and initialized with `undefined`
if (myVar = img.parent('a').length > 0) {
Y = 1; // assignment
} else {
Y = 2; // assignment
}
Vous pouvez observer ce comportement avec l'exemple suivant:
var Y = 'foo';
(function() {
alert(Y); //alerts `undefined`
var Y;
})();
Comme vous le voyez, le alert
est avant la déclaration var
en cette fonction, mais puisque l'instruction var
est hissée, la variable Y
de cette nouvelle portée est configurée bef l'exécution, lorsque le processus Variable Instantiation a lieu.
L'approche la plus directe, serait de déclarer et assigner myVar
:
var Y, myVar = img.parent('a').length > 0;
if (myVar) {
Y = 1;
} else {
Y = 2;
}
// Or Y = myVar ? 1 : 2;
Ou encore plus court, en une seule déclaration var
:
var myVar = img.parent('a').length > 0,
Y = myVar ? 1 : 2;
//...