2010-10-08 7 views
50

Eventuali duplicati:
Javascript: is using 'var' to declare variables optional?È necessaria la variabile var quando si dichiarano le variabili Javascript?

Durante la creazione di variabili in javascript è l'aggiunta di "var" prima del nome della variabile d'obbligo?

Per esempio, invece di

var message = "Hello World!" 

posso usare

message = "Hello World!" 

?

Ho notato che gli script come Google Adsense non utilizzare var

Esempio:

google_ad_width = 160; 
google_ad_height = 600; 
google_color_border = "000000"; 
google_color_bg = "ffffff"; 
+0

Perché taggato PHP? – BoltClock

+6

Ho fatto una ricerca di SO in base al titolo della tua domanda. Questo è il primo risultato che ho ricevuto: http://stackoverflow.com/questions/2485423/javascript-is-using-var-to-declare-variables-optional – user113716

risposta

92

Senza il var si crea un globale e globali sono un modo fantastico per avere diverse funzioni sovrascrittura ogni altri variabili (vale a dire che fanno il codice un dolore per mantenere).

Con lo var, l'ambito della variabile è limitato alla funzione corrente (e qualsiasi cosa al suo interno - è possibile annidare le funzioni).

Google Adsense utilizza i globali perché divide gli script in due parti distinte (una locale e una remota). Un approccio più pulito sarebbe quello di chiamare una funzione definita nello script remoto e passare i parametri come argomenti invece di averli prelevati dall'ambito globale.

+0

Questo ha assolutamente senso! – V777

+1

+1 Vorrei che lo sapessi qualche giorno fa quando stavo cercando di creare una variabile globale e tutto ciò che ho ottenuto era indefinito oO –

+1

Inoltre, facendo riferimento a una variabile che non è stata dichiarata, verrà generato un errore in modalità rigorosa ECMAScript 5 . –

3

Senza var una variabile è definita globale.

4

Da http://www.updrift.com/article/to-var-or-not-to-var-my-javascript

  1. Per le variabili globali, non importa, ma si consiglia di utilizzarlo per la coerenza.
  2. Provare sempre a utilizzare 'var' per dichiarare le variabili nelle funzioni locali. Si accerta che tu stia utilizzando una copia locale della variabile anziché un'altra variabile con lo stesso nome in un ambito diverso.

Per esempio, le due funzioni simili qui hanno effetti molto diversi:

var myvar = 0; 
function affectsGlobalVar(i){ 
    myvar = i; 
} 
function doesNotAffectGlobalVar(i){ 
    var myvar = i; 
} 
1

Per i non illuminati come me, JavaScript ha fondamentalmente due scopi per le variabili: globali e locali. Variabili assegnate al di fuori di una funzione sono globali, e le variabili assegnati all'interno di una funzione, utilizzando la parola chiave var, sono locali (non razzo intervento chirurgico).Tuttavia, se si lascia la parola chiave disattivata, viene assegnata una variabile globale , indipendentemente da dove è stata dichiarata .

Da: http://opensoul.org/2008/9/4/the-importance-of-var-in-javascript

+0

In pratica, è corretto. Tuttavia, possono esistere ambiti locali nidificati. Non è possibile accedere a una var dichiarata in una funzione all'interno di un'altra funzione dalla funzione genitore. – treeface

7

Sì, è necessario utilizzare sempre var.

Non usando var ha due inconvenienti principali:

  • Accesso a una variabile all'interno di una funzione che non è definita all'interno di tale funzione causerà l'interprete di guardare la catena possibilità di una variabile con quel nome fino a quando essa trova uno o arriva all'oggetto globale (accessibile nei browser tramite window) dove creerà una proprietà. Questa proprietà globale è ora disponibile ovunque, causando potenzialmente confusione e bug difficili da rilevare;
  • L'accesso a una variabile non dichiarata causerà un errore nella modalità rigorosa ECMAScript 5.

Inoltre, non utilizzando var per la variabile globale non è esattamente lo stesso che usare var: usando var, la proprietà crea sull'oggetto globale ha l'attributo interna DontDelete, che non è il caso senza var:

// Next line works in any ECMAScript environment. In browsers, you can 
// just use the window object. 
var globalObj = (function() { return this; })(); 

var x = 1; 
delete globalObj.x; 
alert(x); // Alerts 1, x could not be deleted 

y = 2; 
delete globalObj.y; 
alert(y); // Error, y is undefined 
Problemi correlati