2009-04-27 1 views
0

Ich habe gehört, dass es keine gute Idee ist, Elemente in JavaScript global zu machen. Ich verstehe nicht warum. Ist das etwas, was IE nicht kann?Warum ist es schlecht, Elemente globale Variablen in Javascript zu machen?

Zum Beispiel:

div = getElementById('topbar'); 
+1

Wovon redest du? Ereignishandler? Globale Variablen? Ereignishandler, die über on/event/= Attribute im Markup angehängt sind? – Shog9

+0

Meinst du globale Variablen? Können Sie Ihre Frage umformulieren oder einen Beispielcode eingeben? –

+0

Sorry, ich meinte 'Elemente' wie div = document.getElementById ('topbar'), nicht 'events'. Ich werde meine Frage klären. – Alex

Antwort

7

Ich glaube nicht, dass das ein Implementierungsproblem ist, aber mehr ein gutes vs. schlechtes Übungsproblem. Normalerweise ist global * eine schlechte Methode und sollte vermieden werden (globale Variablen usw.), da Sie nie wirklich wissen, wie sich der Umfang des Projekts entwickelt und wie Ihre Datei eingebunden wird.

Ich bin kein großer JS-Freak, so dass ich nicht in der Lage sein werde, Ihnen die Details genau zu geben, warum JS-Ereignisse schlecht sind, aber Christian Heilmann talks about JS best practices here, könnten Sie einen Blick darauf werfen. Versuchen Sie auch „JS best practices“

bearbeiten googeln: Wikipedia über globale Variablen, die auch für Ihr Problem zutreffen könnte:

[globale Variablen] sind in der Regel schlechte Praxis betrachtet genau wegen ihrer Nicht-Lokalität: Eine globale Variable kann möglicherweise von von überall modifiziert werden (es sei denn, sie befinden sich in geschützten Speicher) und jeder Teil des Programms kann davon abhängen. Eine globale Variable hat daher eine unbegrenzte Potenzial für die gegenseitigen Abhängigkeiten, und das Hinzufügen gegenseitigen Abhängigkeiten erhöht die Komplexität. Siehe Aktion in einiger Entfernung. In wenigen Fällen können globale Variablen jedoch zur Verwendung geeignet sein. Zum Beispiel können sie verwendet werden, um zu vermeiden, häufig verwendete Variablen kontinuierlich über mehrere Funktionen zu übergeben.

über http://en.wikipedia.org/wiki/Global_variable

4

Ist es etwas IE nicht umgehen kann?

Nein es ist kein IE-Ding. Sie können niemals davon ausgehen, dass Ihr Code das einzige im Dokument verwendete Skript ist. Daher ist es wichtig, dass Sie sicherstellen, dass Ihr Code keine globalen Funktions- oder Variablennamen hat, die andere Skripts überschreiben können.

Beispiele finden Sie unter Play Well With Others.

2

Ich gehe davon durch "Ereignisse" Sie meinen die Event-Handling JavaScript (Funktionen).

Im Allgemeinen ist es falsch, mehr als eine globale Variable in JS zu verwenden. (Es ist unmöglich, mindestens einen zu verwenden, wenn Sie Daten für zukünftige Verwendung speichern.) Das liegt daran, dass es das gleiche Problem wie alle namespacing versucht zu lösen - was ist, wenn Sie eine Methode DoSomething() geschrieben haben und jemand anderes eine geschrieben hat Methode namens doSomething()?

Der beste Weg, um dies zu umgehen, ist eine globale Variable, die ein Objekt für alle Ihre Daten und Funktionen ist.Zum Beispiel:

var MyStuff = {}; 
MyStuff.counter = 0; 
MyStuff.eventHandler = function() { ... }; 
MyStuff.doSomething = function() { ... }; 

// Later, when you want to call doSomething()... 
MyStuff.doSomething(); 

Auf diese Weise verschmutzen Sie den globalen Namespace minimal; Sie brauchen sich nur Sorgen zu machen, dass jemand anders Ihre globale Variable verwendet.

Natürlich ist nichts davon ein Problem, wenn Ihr Code nie mit jemand anderem spielen wird ... aber diese Art von Denken wird Sie später in den Arsch beißen, wenn Sie jemals den Code eines anderen verwenden. Solange jeder in Bezug auf JS Globalnamen nett spielt, kann der gesamte Code auskommen.

+0

Oh, es tut mir leid, was ich meinte war nicht 'Event', es war 'Element'. Etwas wie div = document.getElementById ('topbar'). – Alex

1

Es sollte kein Problem mit globalen Variablen im Code sein, solange man sie in einem uniqe namespase/Objekt Einwickeln (Kollision mit Skripten zu vermeiden, die nicht von Ihnen sind)

die Haupt adventage der Verwendung Die globale Variable in Javascript leitet sich aus der Tatsache ab, dass JavaScript keine starke Typsprache ist. Wenn Sie also komplexe Objekte als Argumente an eine Funktion übergeben, werden Sie die gesamte Intelligenz für diese Objekte verlieren (innerhalb des Funktionsumfangs.) während Sie stattdessen globale Objekte verwenden, wird diese Intellisence erhalten.

Ich persönlich finde das sehr nützlich und es hat sicherlich Platz in meinem Code.

(natürlich sollte man immer die richtige Balance zwischen den Variablen locales und globals machen)

Verwandte Themen