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

So machen Sie React-Komponenten im Vollbildmodus

einführen Dieser Artikel basiert auf React + antd...

Kopieren von JS-Objekten (Deep Copy und Shallow Copy)

Inhaltsverzeichnis 1. Oberflächliche Kopie 1. Obj...

So konfigurieren Sie zwei oder mehr Sites mit dem Apache-Webserver

So hosten Sie zwei oder mehr Sites auf dem belieb...

Wissen Sie, warum Vue-Daten eine Funktion sind?

Erklärung auf der offiziellen Website: Wenn eine ...

Ein Artikel, der Ihnen ein tiefes Verständnis von Mysql-Triggern vermittelt

Inhaltsverzeichnis 1. Wenn beim Einfügen oder Änd...

Allgemeine Probleme mit der Regelpriorität beim Nginx-Standort

Inhaltsverzeichnis 1. Standort / Matching 2. Stan...

Detaillierte Erklärung zu React Hooks

Inhaltsverzeichnis Was sind Hooks? Klassenkompone...

Vier Methoden zur Datentypbeurteilung in JS

Inhaltsverzeichnis 1. Art von 2. Instanz von 3. K...

Auszeichnungssprache - für

Klicken Sie hier, um zum Abschnitt „HTML-Tutorial“...