Im täglichen Studium stoßen wir häufig auf die Verwendung dieses Begriffs.
Möglicherweise sind Sie auf diese JS-Interviewfrage gestoßen:
var obj = { foo: function(){ console.log(this) } }var bar = obj.foo obj.foo() // 打印出的 this 是 objbar() // 打印出的 this 是 window
Bitte erklären Sie, warum die Werte der Funktionen in den letzten beiden Zeilen unterschiedlich sind.
——-
Das Verständnis für Anfänger war schon immer vage. Der heutige Artikel wird alles ein für alle Mal erklären.
Und Sie können diese Erklärung nirgendwo anders sehen. Verstehen Sie diesen Artikel, alle Interviewfragen dazu sind nur Beilagen.
Funktionsaufruf
Zuerst müssen wir mit dem Funktionsaufruf beginnen.
Es gibt drei Funktionsaufrufformen in JS (ES5):
func(p1, p2) obj.child.method(p1, p2) func.call(context, p1, p2) // 先不讲 apply
Im Allgemeinen kennen Anfänger die ersten beiden Formen und denken, dass die ersten beiden Formen „besser“ sind als die dritte Form.
Sobald Sie diesen Artikel lesen, müssen Sie sich daran erinnern, dass die dritte Aufrufform die normale Aufrufform ist:
func.call(context, p1, p2)
Die anderen beiden sind Syntaxzucker und können äquivalent in Aufrufform geändert werden:
func(p1, p2) ist äquivalent zu func.call(undefiniert, p1, p2)obj .child.method(p1 , p2) entspricht obj.child.method.call(obj.child, p1, p2)
Bitte notieren Sie es. (Wir nennen diesen Code unten „Konvertierungscode“, um ihn leichter nachschlagen zu können)
Bisher hat unser Funktionsaufruf nur eine Form:
func.call(context, p1, p2)
Auf diese Weise kann dies erklärt werden
Dies ist der Kontext im obigen Code. So einfach ist das.
Dies ist der Kontext, der übergeben wird, wenn Sie eine Funktion aufrufen. Da Sie nie die Aufrufform „Funktionsaufruf“ verwenden, wissen Sie es nie.
Schauen Sie sich zunächst an, wie Sie dies in func(p1, p2) ermitteln können:
Wenn Sie den folgenden Code schreiben
function func(){ console.log(this)}func() 等价于 function func(){ console.log(this)}func.call(undefined) // 可以简写为 func.call()
Logischerweise sollte das gedruckte this undefiniert sein, richtig? , aber es gibt eine Regel im Browser:
Wenn der von Ihnen übergebene Kontext null oder undefiniert ist, dann ist das Fensterobjekt der Standardkontext (der Standardkontext im strikten Modus ist undefiniert)
Also Das obige Druckergebnis ist Fenster.
Wenn Sie hoffen, dass dies hier kein Fenster ist, ist es ganz einfach:
func.call(obj) // Dann ist dies darin das obj-Objekt
Schauen Sie sich an obj noch einmal. So ermitteln Sie dies von child.method(p1, p2)
var obj = { foo: function(){ console.log(this) } } obj.foo()
Laut „Konvertierungscode“ konvertieren wir obj.foo() in
obj.foo.call( obj)
Okay, das ist obj. Erledigt.
Zurück zum Thema:
var obj = { foo: function(){ console.log(this) } }var bar = obj.foo
obj.foo() // Konvertieren in obj.foo.call(obj), das ist objbar()// Konvertieren in bar.call() // Da kein Kontext übergeben wird// dies also undefiniert ist// Schließlich gibt Ihnen der Browser ein Standardfensterobjekt
[ ] Syntax
function fn (){ console.log(this) } var arr = [fn, fn2] arr0 // 这里面的 this 又是什么呢?
Wir können uns vorstellen, dass arr0 ist arr.0(). Obwohl die Syntax des letzteren falsch ist, entspricht die Form obj.child.method(p1, p2) im Konvertierungscode, sodass Sie problemlos konvertieren können:
arr0
wird als arr.0()
angenommen und dann in arr.0.call(arr)
konvertiert, dann ist das darin arr :)
Zusammenfassung
das ist das Kontext, der beim Aufruf einer Funktion übergeben wird.
Wenn Ihr Funktionsaufrufformular kein Aufrufformular ist, befolgen Sie bitte den „Konvertierungscode“, um es in ein Aufrufformular zu konvertieren.
Zukünftig werden Sie bei allen diesbezüglichen schriftlichen Prüfungsfragen keine Zweifel mehr haben.
Dieser Artikel enthält eine entsprechende Erklärung dazu. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website.
Verwandte Empfehlungen:
HTML5/CSS3-bezogene Wissenserklärunge
Zusammenfassung gängiger APIs, die von Javascript zum Betrieb von DOM verwendet werden
Das obige ist der detaillierte Inhalt vonVerwendung davon in Javascript. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Sowohl Python als auch JavaScripts Entscheidungen in Entwicklungsumgebungen sind wichtig. 1) Die Entwicklungsumgebung von Python umfasst Pycharm, Jupyternotebook und Anaconda, die für Datenwissenschaft und schnelles Prototyping geeignet sind. 2) Die Entwicklungsumgebung von JavaScript umfasst Node.JS, VSCODE und WebPack, die für die Entwicklung von Front-End- und Back-End-Entwicklung geeignet sind. Durch die Auswahl der richtigen Tools nach den Projektbedürfnissen kann die Entwicklung der Entwicklung und die Erfolgsquote der Projekte verbessert werden.

Ja, der Motorkern von JavaScript ist in C. 1) Die C -Sprache bietet eine effiziente Leistung und die zugrunde liegende Steuerung, die für die Entwicklung der JavaScript -Engine geeignet ist. 2) Die V8-Engine als Beispiel wird sein Kern in C geschrieben, wobei die Effizienz und objektorientierte Eigenschaften von C kombiniert werden.

JavaScript ist das Herzstück moderner Websites, da es die Interaktivität und Dynamik von Webseiten verbessert. 1) Es ermöglicht die Änderung von Inhalten, ohne die Seite zu aktualisieren, 2) Webseiten durch DOMAPI zu manipulieren, 3) Komplexe interaktive Effekte wie Animation und Drag & Drop, 4) die Leistung und Best Practices optimieren, um die Benutzererfahrung zu verbessern.

C und JavaScript erreichen die Interoperabilität durch WebAssembly. 1) C -Code wird in das WebAssembly -Modul zusammengestellt und in die JavaScript -Umgebung eingeführt, um die Rechenleistung zu verbessern. 2) In der Spieleentwicklung kümmert sich C über Physik -Engines und Grafikwiedergabe, und JavaScript ist für die Spiellogik und die Benutzeroberfläche verantwortlich.

JavaScript wird in Websites, mobilen Anwendungen, Desktop-Anwendungen und serverseitigen Programmierungen häufig verwendet. 1) In der Website -Entwicklung betreibt JavaScript DOM zusammen mit HTML und CSS, um dynamische Effekte zu erzielen und Frameworks wie JQuery und React zu unterstützen. 2) Durch reaktnatives und ionisches JavaScript wird ein plattformübergreifendes mobile Anwendungen entwickelt. 3) Mit dem Elektronenframework können JavaScript Desktop -Anwendungen erstellen. 4) Node.js ermöglicht es JavaScript, auf der Serverseite auszuführen und unterstützt hohe gleichzeitige Anforderungen.

Python eignet sich besser für Datenwissenschaft und Automatisierung, während JavaScript besser für die Entwicklung von Front-End- und Vollstapel geeignet ist. 1. Python funktioniert in Datenwissenschaft und maschinellem Lernen gut und unter Verwendung von Bibliotheken wie Numpy und Pandas für die Datenverarbeitung und -modellierung. 2. Python ist prägnant und effizient in der Automatisierung und Skripten. 3. JavaScript ist in der Front-End-Entwicklung unverzichtbar und wird verwendet, um dynamische Webseiten und einseitige Anwendungen zu erstellen. 4. JavaScript spielt eine Rolle bei der Back-End-Entwicklung durch Node.js und unterstützt die Entwicklung der Vollstapel.

C und C spielen eine wichtige Rolle in der JavaScript -Engine, die hauptsächlich zur Implementierung von Dolmetschern und JIT -Compilern verwendet wird. 1) C wird verwendet, um JavaScript -Quellcode zu analysieren und einen abstrakten Syntaxbaum zu generieren. 2) C ist für die Generierung und Ausführung von Bytecode verantwortlich. 3) C implementiert den JIT-Compiler, optimiert und kompiliert Hot-Spot-Code zur Laufzeit und verbessert die Ausführungseffizienz von JavaScript erheblich.

Die Anwendung von JavaScript in der realen Welt umfasst Front-End- und Back-End-Entwicklung. 1) Zeigen Sie Front-End-Anwendungen an, indem Sie eine TODO-Listanwendung erstellen, die DOM-Operationen und Ereignisverarbeitung umfasst. 2) Erstellen Sie RESTFUFFUPI über Node.js und express, um Back-End-Anwendungen zu demonstrieren.


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

PHPStorm Mac-Version
Das neueste (2018.2.1) professionelle, integrierte PHP-Entwicklungstool

SAP NetWeaver Server-Adapter für Eclipse
Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.

MinGW – Minimalistisches GNU für Windows
Dieses Projekt wird derzeit auf osdn.net/projects/mingw migriert. Sie können uns dort weiterhin folgen. MinGW: Eine native Windows-Portierung der GNU Compiler Collection (GCC), frei verteilbare Importbibliotheken und Header-Dateien zum Erstellen nativer Windows-Anwendungen, einschließlich Erweiterungen der MSVC-Laufzeit zur Unterstützung der C99-Funktionalität. Die gesamte MinGW-Software kann auf 64-Bit-Windows-Plattformen ausgeführt werden.

VSCode Windows 64-Bit-Download
Ein kostenloser und leistungsstarker IDE-Editor von Microsoft
