2011-11-09 7 views

risposta

18

Fondamentalmente, vardichiara una variabile e si può anche assegnare ad esso allo stesso tempo.

Senza var, sta assegnando alla variabile. L'assegnazione assegnerà ad una variabile esistente o creerà una variabile globale di quel nome, quindi assegnerà ad essa.

Al di fuori delle funzioni, ciò significa che non vi è alcuna differenza reale (in principale) se la variabile non esiste già. Entrambi creano la variabile globale foo in questo caso.

All'interno di una funzione, c'è un'enorme differenza. Il primo crea una variabile locale alla funzione indipendentemente dal fatto che esista o meno altrove.

Il secondo crea una variabile globale se non esiste o semplicemente modifica il valore se esiste.

Per mantenere il codice il più modulare possibile, è necessario sempre utilizzare var a meno che non si desideri specificamente modificare le variabili globali esistenti. Ciò significa dichiarare tutti i globali al di fuori delle funzioni con var e dichiarare tutti i locali con var.

+0

Esiste una differenza anche al di fuori di una funzione. Puoi farlo obj.prop, non puoi fare var obj.prop! –

+0

@Chintan, questo probabilmente dipende dal fatto che 'obj.prop' non può essere in realtà una nuova variabile, piuttosto è una proprietà di una variabile' obj' esistente. – paxdiablo

1

Nel primo caso, foo sarà disponibile nello stesso ambito in cui è definito, cioè sarà variabile locale. Nel secondo caso, foo è una variabile globale, situata nell'ambito globale.

5

foo = 1 inserisce foo nell'ultimo ambito in cui è stato definito foo o nell'ambito globale. var foo = 1 inserirà la variabile nell'ambito corrente (ovvero la funzione corrente).

+0

@pst: cosa intendi? – Ryan

+0

La lingua aggiornata è molto meglio :) –

+0

@pst: Okay, originariamente stavo per dirti che: "Ho modificato alcuni 3 secondi dopo aver postato, mi dispiace :)" ma poi ho pensato che intendevi http://jsfiddle.net/minitech/sEkYt/ – Ryan