2013-10-16 18 views

risposta

62

JS non hanno la portata di blocco, hanno portata "funzione" (o, talvolta, globale).

La dichiarazione (ma non l'assegnazione) è "issata" all'inizio della funzione.

jshint si avverte che ci sono due tali dichiarazioni - il codice è equivalente a:

var someVar; 
var someVar; // warning! 
if (something) { 
    someVar = true; 
} else { 
    someVar = false; 
} 
+0

Grazie, molto utile! – user2413333

8

Non si dovrebbe mettere var dichiarazioni in tali luoghi. Inserire la dichiarazione var prima dello if e quindi impostare "someVar" su un valore.

In effetti, qui non è necessario un if dichiarazione a tutti:

var someVar = !!(something); 

farà la stessa cosa. (La doppia applicazione di ! garantisce che "someVar" è impostato su true o false, sulla base del "truthiness" di something.)

+1

Ah che è buono a sapersi, grazie – user2413333

+7

'var someVar = Boolean (qualcosa);' fa la stessa cosa ed è forse più leggibile. –

18

Ciò è dovuto al sollevamento.

in JavaScript, non importa dove si definisce una nuova variabile con var, si muove alla parte superiore della funzione si è nel codice produce il seguente sopra la se blocco nella parte superiore della funzione:.

var someVar; 
var someVar; 

Ecco un tutorial per spiegare sollevamento: le variabili

http://net.tutsplus.com/tutorials/javascript-ajax/quick-tip-javascript-hoisting-explained/

+0

Grazie, molto utile! – user2413333

+0

Ho notato che la tua formulazione è cambiata da "probabilmente dovuto" a "due" nello stesso momento in cui hai aggiunto il codice uguale alla mia risposta ... – Alnitak

+1

Non sono sicuro se stai insinuando qualcosa, ma nel caso lo sia, io non ha copiato la tua risposta. –