Ik heb deze code:
if ( something is true ) {
var someVar = true;
} else {
var someVar = false;
}
JsHint zegt dat “er al een Var is gedefinieerd” in het else-instructiegedeelte. Waarom is dit en hoe los ik het op?
Bedankt
Antwoord 1, autoriteit 100%
JS-variabelen hebben geen blokbereik, ze hebben een “functie” bereik (of soms globaal).
De aangifte (maar niet de toewijzing) wordt “gehesen” naar de top van de functie.
jshint waarschuwt u dat u twee van dergelijke verklaringen heeft – uw code is gelijk aan:
var someVar;
var someVar; // warning!
if (something) {
someVar = true;
} else {
someVar = false;
}
Antwoord 2, autoriteit 26%
Dit komt door hijsen.
In javascript, ongeacht waar u een nieuwe variabele definieert met var
, het verplaatst deze naar de bovenkant van de functie waarin u zich bevindt. Uw code produceert het volgende boven uw if-blok bovenaan van de functie:
var someVar;
var someVar;
Hier is een tutorial om het hijsen uit te leggen:
http://net.tutsplus.com/tutorials/javascript- ajax/quick-tip-javascript-hoisting-explained/
Antwoord 3, autoriteit 15%
Je moet geen var
-declaraties op zulke plaatsen plaatsen. Zet de var
-declaratie voor de if
en stel vervolgens “someVar” in op een waarde.
Inderdaad, hier heb je helemaal geen if
-statement nodig:
var someVar = !!(something);
zal hetzelfde doen. (De dubbele toepassing van !
zorgt ervoor dat “someVar” is ingesteld op true
of false
, gebaseerd op de “truthiness” van something
.)