Was bedeutet es, dass der globale Namespace verschmutzt wäre?
Ich verstehe nicht wirklich, was es bedeutet, wenn ein globaler Namespace verschmutzt wird.
javascript
theJava
quelle
quelle
Antworten:
Kurzer Hinweis zur Speicherbereinigung
Wenn Variablen an Umfang verlieren, können sie Speicherbereinigungen durchführen. Wenn sie einen globalen Gültigkeitsbereich haben, können sie erst erfasst werden, wenn der globale Namespace den Gültigkeitsbereich verliert.
Hier ist ein Beispiel:
Wenn Sie dies zu Ihrem globalen Namespace hinzufügen (zumindest für mich), sollten 10.000 KB Speicher (Win7 Firefox) hinzugefügt werden, die nicht erfasst werden. Andere Browser behandeln dies möglicherweise anders.
Während derselbe Code in einem Bereich vorhanden ist, der außerhalb des Bereichs wie folgt liegt:
Ermöglicht es
arra
, den Umfang zu verlieren, nachdem die Schließung ausgeführt wurde, und für die Speicherbereinigung berechtigt zu sein.Globaler Namespace ist dein Freund
Trotz der vielen Behauptungen gegen die Verwendung des globalen Namespace ist es Ihr Freund. Und wie ein guter Freund sollten Sie Ihre Beziehung nicht missbrauchen.
Sei sanft
Missbrauche den globalen Namespace nicht (normalerweise als "Verschmutzung" bezeichnet). Und was ich damit meine, den globalen Namespace nicht zu missbrauchen, ist - nicht mehrere globale Variablen erstellen. Hier ist ein schlechtes Beispiel für die Verwendung des globalen Namespace.
Dadurch werden 11 globale Variablen erstellt, die möglicherweise irgendwo überschrieben oder falsch interpretiert werden könnten.
Seien Sie einfallsreich
Ein einfallsreicher Ansatz, der den globalen Namespace nicht verschmutzt, besteht darin, dies alles in das Modulmuster einzuschließen und nur eine globale Variable zu verwenden, während mehrere Variablen verfügbar gemacht werden.
Hier ein Beispiel: (Bitte beachten Sie, dass dies einfach ist und keine Fehlerbehandlung erfolgt.)
quelle
Calculate.prototype.Slope()
außerhalb des Geltungsbereichs ist? Es wäre sehr perfekt, ein anderes Konzept zu verstehen, das dieser Problematik nahe kommt!In JavaScript liegen Deklarationen außerhalb einer Funktion im globalen Bereich. Betrachten Sie dieses kleine Beispiel:
Im obigen Beispiel
x
wird im globalen Bereich deklariert. Jeder untergeordnete Bereich, wie der von derexample
Funktion erstellte, erbt effektiv Dinge, die in einem übergeordneten Bereich deklariert sind (in diesem Fall ist dies nur der globale Bereich).Jeder untergeordnete Bereich, der eine im globalen Bereich deklarierte Variable erneut deklariert, wird die globale Variable beschatten und möglicherweise unerwünschte, schwer zu verfolgende Fehler verursachen:
Globale Variablen werden normalerweise nicht empfohlen, da solche Probleme auftreten können. Wenn wir die
var
Anweisung nicht innerhalb derexample
Funktion verwendet hätten, hätten wir versehentlich den Wert vonx
im globalen Bereich überschrieben :Wenn Sie mehr lesen und richtig verstehen möchten, empfehle ich Ihnen, die ECMAScript-Spezifikation durchzugehen . Es ist vielleicht nicht die aufregendste Lektüre, aber es wird kein Ende haben.
quelle
Wenn Sie globale Variablen, Funktionen usw. deklarieren, werden diese in den globalen Namespace verschoben. Abgesehen von Leistungs- / Speicherproblemen (die auftreten können) kann es zu unglücklichen Namenskonflikten kommen, wenn Sie eine wichtige Variable neu definieren oder nicht den Wert verwenden, von dem Sie glauben, dass Sie ihn verwenden.
Das Definieren von Dingen im globalen Namespace ist zu vermeiden.
quelle