Waarom zegt Jshint “variabele al gedefinieerd” in dit if-statement?

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 ifen 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 trueof false, gebaseerd op de “truthiness” van something.)

Other episodes