2010-05-29 6 views
4
if(myVar = img.parent('a').length > 0){ 
    var Y = 1; 
}else{ 
    var Y = 2; 
} 

Quand je lance ce code maVar (être annoncé pour la première fois) prend la valeur de img.parent('a').length > 0 et devient soit false ou true selon le cas.sémantique de code Javascript

Première question:
Est-ce une bonne façon de définir maVar?

Deuxième question:
Suis-je en train de définir Y pour la deuxième fois? Est-ce mon deuxième 'var' excès?
dire devrais-je écrire juste Y = 2;

Répondre

7

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; 
//...