2010-10-08 8 views
50

Mögliche Duplizieren:
Javascript: is using 'var' to declare variables optional?Ist Var erforderlich, wenn JavaScript-Variablen deklariert werden?

Wenn Variablen in JavaScript zu schaffen ist das Hinzufügen von "var" vor dem Variablennamen ein Muss?

Zum Beispiel statt

var message = "Hello World!" 

kann ich

message = "Hello World!" 

?

Ich bemerke, dass Skripte wie Google Adsense nicht var

Beispiel verwenden:

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

Warum PHP markiert? – BoltClock

+6

Ich habe eine Suche nach SO basierend auf dem Titel Ihrer Frage durchgeführt. Dies ist das erste Ergebnis, das ich erhalten habe: http://stackoverflow.com/questions/2485423/javascript-using-var-to-declare-variables-optional – user113716

Antwort

92

Ohne die var erstellen Sie eine globale, und globale sind eine fantastische Möglichkeit, verschiedene Funktionen zu haben, die sich gegenseitig Variablen überschreiben (d. H. Sie machen den Code zu einem Schmerz zu pflegen).

Mit der var ist der Gültigkeitsbereich der Variablen auf die aktuelle Funktion (und alles darin - es ist möglich, Funktionen zu verschachteln) begrenzt.

Google Adsense verwendet Globals, weil es Skripte in zwei verschiedene Teile (einen lokalen und einen Remote) unterteilt. Ein saubererer Ansatz wäre, eine im Remote-Skript definierte Funktion aufzurufen und die Parameter als Argumente zu übergeben, anstatt sie vom globalen Gültigkeitsbereich abzurufen.

+0

Das macht total Sinn! – V777

+1

+1 Ich wünschte, ich wüsste das vor ein paar Tagen, als ich tatsächlich versuchte, eine globale Variable zu erstellen, und alles, was ich bekam, war undefiniert. OO –

+1

Auch die Bezugnahme auf eine Variable, die nicht deklariert wurde, wird einen Fehler in ECMAScript 5 strict mode auslösen . –

3

Ohne Variable ist eine Variable global definiert.

4

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

  1. Für globale Variablen, spielt es keine Rolle, aber man kann es für Konsistenz verwenden möchten.
  2. Versuchen Sie immer, 'var' zu verwenden, um Variablen in lokalen Funktionen zu deklarieren. Es stellt sicher, dass Sie eine lokale Kopie der Variablen anstelle einer anderen Variablen desselben Namens in einem anderen Bereich verwenden.

Zum Beispiel sind die zwei ähnliche Funktionen hier haben sehr unterschiedliche Effekte:

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

Für die unaufgeklärten wie ich, JavaScript grundsätzlich zwei Bereiche für Variablen hat: global und lokal. Variablen, die außerhalb einer -Funktion zugewiesen sind, sind global, und Variablen , die innerhalb einer Funktion zugewiesen sind, verwenden das Schlüsselwort var, sind lokal (nicht Rakete Chirurgie).Wenn Sie jedoch das var-Schlüsselwort deaktivieren, weist es eine globale -Variable zu, unabhängig davon, wo es deklariert ist.

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

+0

Grundsätzlich ist das richtig. Es kann jedoch verschachtelte lokale Bereiche geben. Auf eine var, die in einer Funktion innerhalb einer anderen Funktion deklariert ist, kann die Elternfunktion nicht zugreifen. – treeface

7

Ja, Sie sollten immer var verwenden.

Nicht mit var zwei große Nachteile:

  • eine Variable innerhalb einer Funktion Zugriff auf die nicht innerhalb dieser Funktion definiert ist, wird der Interpreter verursachen, bis entweder den Umfang Kette für eine Variable mit diesem Namen nachzusehen es Finden Sie einen oder es wird zum globalen Objekt (zugänglich in Browsern über window), wo es eine Eigenschaft erstellen wird. Diese globale Eigenschaft ist jetzt überall verfügbar und führt möglicherweise zu Verwirrung und schwer zu erkennenden Fehlern.
  • Der Zugriff auf eine nicht deklarierte Variable führt zu einem Fehler im strikten ECMAScript 5-Modus.

Auch nicht var für die globale Variable ist nicht genau die gleiche wie mit var: wenn var verwendet, die Eigenschaft auf dem globalen Objekt erstellt hat das interne DontDelete Attribut, das ohne var nicht der Fall ist:

// 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 
Verwandte Themen