Frage

Oft sehe ich ein globales Objekt in JavaScript-Code definiert als Namespace zu handeln.

var MyNS = {a: function() {}, ... };

Aber manchmal sehe ich Leute verlassen weg von den „var“ Keyword wie

MyNS = {a: function() {}, ...};

ich in Webbrowsern glauben, wenn Sie nicht über eine Variable mit var definieren, wird es in dem Fenster Objekt setzen, das als globaler Namensraum fungiert. Da es ein paar Bytes von Text nicht mit „var“ speichert gibt es einen Grund, das Schlüsselwort zu verwenden für diesen speziellen Zweck

War es hilfreich?

Lösung

  

Da es ein paar Bytes von Text spart durch den Verzicht auf „var“ gibt es einen Grund, das Schlüsselwort für diesen Zweck zu benutzen?

Ich würde Ihnen nicht empfehlen, das var Schlüsselwort zu vermeiden, auch wenn Sie Globale Umwelt-Code sind.

Die beiden Wege scheinen ähnlich, aber tatsächlich sind sie nicht das gleiche, das erste ist eine Variable Declaration , die Variable Object auf globalen Code, ist das Objekt Globalen selbst, Deshalb globale Variablen zugänglich als Eigenschaften des globalen Objekts sind (window.MyNS).

Das zweite ist eine nicht angemeldete Zuordnung , es schafft eine Eigenschaft auf das globale Objekt, wenn die Kennung nicht in den Anwendungsbereich Kette gefunden wird.

Ein echter Grund, es zu vermeiden, dass in der neuen Norm der Sprache ECMAScript 5th Edition, unter Strict Mode , wird eine Zuordnung zu einer nicht deklarierten Bezeichner einen ReferenceError brechen Sie den Code werfen.

Es gibt auch eine anderen feinen Unterschied zwischen den beiden Beispielen, erstellt die Variable Instanziierung die Eigenschaft auf dem globalen Objekt mit nicht-löschbar ist:

var myVar = '';
delete window.myVar; // false
typeof window.myVar; // 'string'

Während die nicht angemeldete Zuordnung nicht:

myProp = '';
delete window.myProp; // true
typeof window.myProp; // 'undefined'

Empfohlene Artikel:

Andere Tipps

Die Verwendung von var definiert eine lokale Variable in dem aktuellen Bereich. Wenn Sie im globalen Bereich sind, dann sind sie effektiv gleichwertig. Die Verwendung von var gibt es mehr für Verständlichkeit und Wartbarkeit, da die Absicht absolut klar ist. Es ist weniger klar, ohne die var initialisiert wird.

In jedem lokalen Bereich, wenn MyNS initialisierten irgendwo den Umfang Kette ist, werden Sie, dass die lokale Variable sein überschrieben wird, anstatt eine globale Variable definiert wird.

Ich denke, es ist schön, das Schlüsselwort zu verwenden, weil es Sie in der Gewohnheit wird, und hilft, böse Fehler zu vermeiden, wenn Sie es in Funktionsrümpfe vergessen. Es ist auch schön, falls einige globale Code findet sich in eine Funktion migriert.

Aber nein, es ist nicht unbedingt notwendig.

Bearbeiten -. @Eyelidlessness einen wirklich guten Punkt hat, obwohl, wenn Sie schreiben Code auf globaler Ebene bereits dann ist es kein Problem

Ein ziemlich kugelsicher Muster, das ich gesehen habe, ist globalen Namespaces mit so etwas zu initialisieren:

(function(window, undefined) {

  var foo = { stuff: "in my namespace", ... };

  window.foo = foo;
})(this);

Auf globaler Ebene, this wird das Fenster-Objekt sein (wenn Sie in einem Browser sind, wenn nicht, dann ist es, was das globale Objekt in diesem Zusammenhang ist).

Douglas Crockford auf genau dieser Frage: http://www.yuiblog.com/blog / 2008/04/16 / global-Herrschaft-teil~~POS=TRUNC zwei /

Er setzt einen Kommentar mit der Initialisierung über die Verwendung, aber ohne var. Seine Analyse der Kompromisse ist lesenswert, auch wenn Sie nicht einverstanden sind.

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