Unterschiede zwischen diesem Schlüsselwort in NodeJS und Browsern

Unterschiede zwischen diesem Schlüsselwort in NodeJS und Browsern

Vorwort

Jeder, der JavaScript gelernt hat, muss sich der Frage bewusst sein, wohin dies in verschiedenen Umgebungen verweist. Schauen Sie sich dann den folgenden Code an

Var-Typ = 1
Funktion toWhere(){
	dieser.Typ = 2;
}
wohin();
console.log(Typ)

Sie werden bestimmt denken:

Hier wird ein globaler Variablentyp deklariert. Bei Ausführung von type=1 wird der Wert 1 zugewiesen. Danach wird die Funktion toWhere aufgerufen. Wenn wir dies in der Funktion sehen, bestimmen wir, wohin dies zeigt. Hier ist sehr deutlich, dass dies auf Fenster zeigt. Nachdem this.type=2 ausgeführt wurde, wird der globalen Variablen type der Wert 2 zugewiesen.

Schließlich wird der globale Variablentyp gedruckt und das Ergebnis ist offensichtlich 2.

Öffnen Sie zur Überprüfung den Browser. Dort wird eindeutig eine 2 angezeigt.

Ist das also das Ende?

Wenn Sie Node gelernt haben und den obigen Code nun mit Node.js erneut ausführen, werden Sie den Unterschied feststellen.

Jetzt stellen Sie fest, dass die 1 falsch ist. Ist sie nicht gleich 2?

Verwandtes Debuggen

Aus den obigen Beispielen können wir ersehen, dass derselbe JS-Code unterschiedliche Ergebnisse liefert, wenn er im Browser und in Node.JS ausgeführt wird.

Dies liegt eigentlich an der Problematik dieser Ausrichtung, allerdings unterscheidet sich diese Ausrichtung von dem, was wir normalerweise kennen. Dieses Zeigeproblem wird durch das Arbeitsprinzip des Knotens verursacht

Var-Typ = 1
Funktion toWhere() {
 dieser.Typ = 2
 console.log("dies zeigt auf in der Funktion", dies)
}
zuWohin()
console.log(Typ)
console.log("global dies", dies)

1. Drucken Sie dies im Browser

Dies in der Funktion zeigt auf Fenster, und das globale Dies zeigt auch auf Fenster

2. Drucken Sie dies in nodeJs

Habe es gefunden. Dies zeigt in der Funktion auf Objekt [global].

Wenn wir diesem Wert einer Funktion einen Wert zuweisen, wird dieser tatsächlich an das globale Objekt angehängt. Es wird also nichts an dem Wert dieser Sache im globalen

Knotenprinzipanalyse

Sehen wir uns also an, warum das passiert.

Zuerst müssen wir verstehen, wie nodeJs funktioniert

Skriptdateien, die direkt vom Browser im globalen Bereich ausgeführt werden

In Node verbirgt Node den Code in einer anonymen Funktion, die sofort aufgerufen wird. Sie können global verwenden, um auf den globalen Bereich zuzugreifen.

In der vorherigen Erklärung haben wir festgestellt, dass ein extern ausgegebenes this auf ein leeres Objekt {} verweist. Tatsächlich ist jede in node ausgeführte Datei in ein {} eingeschlossen, sodass die Skriptdateien in ihren eigenen Closures ausgeführt werden, ähnlich wie im Folgenden

{
	(Funktion(){
		//Skriptdatei })()
}

Im vorherigen Beispiel bezieht sich this außerhalb der Funktion auf ein leeres Objekt {}, und innerhalb der Funktion hat this keinen angegebenen Ausführungskontext, sodass es sich auf das globale Objekt - bezieht (das Zugriff auf den globalen Bereich des anonymen Funktionsausführungskontexts hat).

Zusammenfassen

Dies ist das Ende dieses Artikels über die Unterschiede zwischen dem Schlüsselwort this in NodeJS und dem Browser. Weitere Informationen zum Schlüsselwort this in NodeJS und dem Browser finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • So verwenden Sie Node.js zum Implementieren von Befehlszeilenspielen
  • Nodejs ermöglicht das Teilen kleiner Spiele mit mehreren Personen, die gleichzeitig online die Maus bewegen
  • Implementierung einer Multiplayer-Gameserver-Engine mit Node.js
  • Node.js-Framework für Echtzeit-Multiplayer-Spiele
  • Ist node.js für die Entwicklung von Spiele-Backends geeignet?
  • Ein vollständiges Beispiel für die Implementierung eines zeitgesteuerten Crawlers mit Nodejs
  • Der Kernprozess der NodeJS-Verarbeitung einer TCP-Verbindung
  • So schreiben Sie eine Node.JS-Version eines Spiels

<<:  MySQL-Datenbank muss SQL-Anweisungen kennen (erweiterte Version)

>>:  So stellen Sie HTTPS kostenlos auf Tencent Cloud bereit

Artikel empfehlen

CentOS 7.6 Installation der MySQL 5.7 GA-Version Tutorial-Diagramm

Inhaltsverzeichnis Umgebungsvorbereitung Umgebung...

Einführung in den vollständigen Namen und die Funktion von HTML-Tags

Alphabetisch DTD: Gibt an, in welcher XHTML 1.0 D...

Spezifischer Einsatz von Routing Guards in Vue

Inhaltsverzeichnis 1. Globale Wache 1.1 Globaler ...

Beispielcode zur Implementierung der WeChat-Kontoaufteilung mit Nodejs

Das Geschäftsszenario des Unternehmens erfordert ...

Lösen Sie das Docker.Socket-Berechtigungsproblem des VSCode-Docker-Plugins

Lösung: Beenden Sie alle mit .vscode in Zusammenh...

Detaillierte Erklärung dieses Zeigeproblems in der JavaScript-Funktion

dieses Schlüsselwort Welches Objekt ruft die Funk...

Reines HTML+CSS, um einen Element-Ladeeffekt zu erzielen

Dies ist der Effekt der Element-UI-Ladekomponente...

Implementierungsprozess des Nginx-Hochverfügbarkeitsclusters

Dieser Artikel stellt hauptsächlich den Implement...

Lassen Sie uns über Destrukturierung in JS ES6 sprechen

Überblick es6 fügt eine neue Möglichkeit hinzu, b...

Analyse des Prozesses zum Erstellen eines LAN-Servers basierend auf http.server

Ich weiß nicht, ob Sie schon einmal in eine solch...

So konfigurieren Sie Benutzerrollenberechtigungen in Jenkins

Die Jenkins-Konfiguration von Benutzerrollenberec...

So zeigen Sie Anwendungsprotokolle von Docker-Containern an

Docker-Attach-Befehl docker attach [options] 容器st...