Frage

Ich habe gehört, dass es keine gute Idee, Elemente global in JavaScript zu machen. Ich verstehe nicht, warum. Ist es etwas, IE nicht umgehen kann?

Zum Beispiel:

    div = getElementById('topbar');
War es hilfreich?

Lösung

Ich glaube nicht, das ist ein Implementierungsproblem, sondern mehr eine gute vs schlechte Praxis Problem. In der Regel global * ist eine schlechte Praxis und sollte (globale Variablen usw.) vermieden werden, da man nie wirklich wissen, wie der Umfang des Projekts wird sich entwickeln und wie Sie Ihre Datei aufgenommen werden.

Ich bin kein großer JS Freak so dass ich nicht in der Lage sein, Ihnen die Besonderheiten zu geben, auf genau, warum JS Ereignisse sind schlecht, aber Christian Heilmann spricht über JS best Practices hier , könnten Sie einen Blick darauf werfen. Versuchen Sie auch "JS best practices"

googeln

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

  

[globale Variablen] sind in der Regel   als schlechte Praxis genau   wegen ihrer Nicht-Lokalität: eine globale   Variable kann möglicherweise modifiziert werden   von überall, (es sei denn, sie befinden sich in   geschützte Speicher) und jeder Teil der   Programm kann davon abhängen. Eine globale   Variable hat daher eine unbegrenzte   Potenzial für die Schaffung gegenseitigen   Abhängigkeiten und das Hinzufügen von gegenseitigem   Abhängigkeiten erhöht die Komplexität. Sehen   Aktion in einem Abstand. Doch in einem   wenige Fälle können globale Variablen   geeignet für den Einsatz. Zum Beispiel, sie   kann verwendet werden, um zu vermeiden, passieren   häufig verwendete Variablen kontinuierlich   über mehrere Funktionen.

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

Andere Tipps

  

Ist es etwas IE nicht umgehen kann?

Nein ist keine IE Sache. Man kann nie davon ausgehen, dass Ihr Code das einzige Skript im Dokument verwendet werden. Deshalb ist es wichtig, dass Sie Ihr Code sicherstellen, dass keine globale Funktion oder Variablennamen hat, die anderen Scripts überschreiben können.

Siehe spielt gut mit anderen Beispielen .

Ich gehe davon durch „Ereignisse“ können Sie die Ereignisbehandlung bedeuten JavaScript (Funktionen).

Im Allgemeinen ist es schlecht mehr als eine globale Variable in JS zu verwenden. (Es ist unmöglich, nicht mindestens ein zu verwenden, wenn Sie alle Daten für den späteren Gebrauch sind zu speichern.) Das ist, weil es in das gleiche Problem läuft wie alle Namespacing zu lösen versucht - was ist, wenn Sie eine Methode doSomething () geschrieben und jemand anderes hat eine Methode namens doSomething ()

Der beste Weg, dies zu umgehen ist eine globale Variable zu machen, die ein Objekt ist, alle Ihre Daten und Funktionen zu halten. 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 sind Sie minimal den globalen Namensraum verschmutzen; Sie müssen nur Sorgen machen, dass jemand anderes verwendet Ihre globale Variable.

Natürlich nichts davon ist ein Problem, wenn Ihr Code wird nie mit jemandem anderem spielen ... aber diese Art des Denkens wird dich in dem Arsch beißen, wenn Sie später jemals jemand anderen Code am Ende haben werden. Solange jeder in Bezug auf JS globalen Namen schön spielt, kann der gesamte Code auszukommen.

Es sollte kein Problem mit globalen Variablen im Code sein, solange man sie in einem uniqe namespase / Objekt wickelt (zur Vermeidung von Kollisionen mit Skripten, die nicht verkaufen)

die Haupt adventage von globalen Variablen in javascript ergibt sich aus der Tatsache, dass Javascript nicht eine starke Typ Sprache. dort, wenn Sie somes komplexe Objekte als Argumente an eine Funktion übergeben, werden Sie probebly für diese Objekte alle Intellisence verlieren (im Funktionsumfang.) während globale Objekte insteads verwenden, wird diese Intellisence bewahren.

Ich persönlich finde, dass es sehr usfull und es sicherlich Platz in meinem Code.

(natürlich sollte man Alwayse die richtige Balance machen zwischen Lokalen und Globals Variablen)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top