Was ist die "global" - Objekt in NodeJS
Ich habe gerade gesehen, das es ein komisches Verhalten von der this
Schlüsselwort in NodeJS Umgebung. Ich bin Inserat Sie mit code. Ich habe die Ausführung dieses codes mit NodeJS v6.x
mit einer einzigen JavaScript
Datei.
Während des Tests mit einer Zeile code wie folgt, egal ob mit oder ohne 'use strict'
Anweisung, weist dies auf ein leeres Objekt {}
.
console.log(this)
Aber, wenn ich die Ausführung der Anweisung innerhalb einer selbst ausgeführten Funktion wie,
(function(){
console.log(this);
}());
Es ist drucken eine wirklich große Objekt. Mir scheint, die Globalen execution context-Objekt erstellt, indem NodeJS
Umgebung.
Und während der Ausführung der oben genannten Funktion mit einem 'use strict'
Anweisung, wie erwartet, es ist Druck undefined
(function(){
'use strict';
console.log(this);
}());
Aber, während der Arbeit mit browser (getestet hab ich nur mit Chrome
), die ersten drei Beispiele liefern die window
Objekt und die Letzte gab undefined
als erwartet.
Das Verhalten der browser ist durchaus verständlich. Aber im Fall von NodeJS
ist, tut es nicht schaffen den Kontext für die Ausführung, bis ich bin das einwickeln innerhalb einer Funktion?
So, die meisten der code in NodeJS
läuft mit einem leeren globalen object
?
- Haben Sie einen Blick auf: stackoverflow.com/questions/22770299/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Während in den Browsern die globalen Bereich ist die
window
Objekt, in nodeJS den globalen Umfang eines Moduls wird das Modul selbst, also, wenn Sie eine variable definieren, die im globalen Gültigkeitsbereich Ihrer nodeJS-Modul, es wird nur lokal verfügbar sein, um dieses Modul.Können Sie mehr darüber Lesen Sie in der NodeJS-Dokumentation, wo es heißt:
Und in Ihrem code, wenn Sie schreiben:
console.log(this)
in eine leere js-Datei(Modul), gibt es ein leeres Objekt{}
verweisen auf Ihre leeren Modul.console.log(this);
innerhalb einer sich selbst aufrufenden Funktionthis
auf den globalen nodeJS scope-Objekt enthält alle NodeJS-gemeinsame Eigenschaften und Methoden wierequire()
,module
,exports
,console
...console.log(this)
mit strict-Modus innerhalb einer sich selbst aufrufenden Funktion wird es druckenundefined
als selbst aufgerufen, die Funktion nicht, einen Standard-local scope-Objekt in Strict-Modus.Wert von
this
in einem node-Modul:this
in NodeJS globalen Bereich ist das aktuelle Modul.Export-Objekt, nicht das Globale Objekt. Dies unterscheidet sich von einem browser, in dem der Globale Bereich ist der Globalewindow
Objekt. Betrachten Sie den folgenden code ausgeführt Knoten:Zuerst loggen wir uns ein emty-Objekt, weil es keine Werte in
module.exports
in diesem Modul. Dann setzen wirfoo
auf diemodule.exports
Objekt, wenn wir dann wieder meldenthis
können wir sehen, dass es jetzt die logs aktualisiertmodule.exports
Objekt.Wie können wir den Zugriff auf die
global
Objekt:Können wir auf die
global
Objekt im Knoten mit derglobal
Stichwort:Den
global
- Objekt stellt eine Vielzahl von nützlichen Eigenschaften für die Umwelt. Auch dies ist der Ort, wo Funktionen wiesetImmediate
undclearTimeout
befinden.Beginnen mit Dokumentation auf den Globalen Kontext, in Knoten-Umgebung
Jede JS-Datei wird genauso behandelt wie ein Modul. Knoten automatisch umbricht den code der JS-Datei in einem self-IIFE mit
exports, require, module, __filename, __dirname
als Parameter an die Funktion.Unten ist der screenshot der Ausführungskontext mithilfe
node-debug
Wenn Sie führen Sie den folgenden code, Drucke
true
was bedeutetthis
bezieht sich aufexports
im node.js. Am besten erklärt in diesem Antwort.Was bedeutet, dass bei der Ausführung der code umgebrochen wird etwas ähnliches, wie unten in Node.js trennen Sie Ihren code aus globalen Kontext mit ein eine wrapper-Funktion, Kontext.
Antwort auf den nächsten Punkt finden Sie diese Dokumentation komplett:
also, wenn Sie diesen code ausführen,
druckt die
global
Objekt und inuse strict
- Modus drucktundefined
Denken Sie daran:
Im Browser die Funktion nicht verpackt von IIFE/wrapper-Funktion, Kontext als in-Knoten, der direkt ausgeführt
window
Objekt. Daher der Aufruf-Kontext variiert Node.js und Browser.Lesen Sie auch diese.