Warum ist es schlecht Elemente globale Variablen in Javascript zu machen?
-
18-09-2019 - |
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');
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"
googelnEdit: 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.
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.
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)