JS Drei BergeSynchron AsynchronEs gibt nur zwei Vorgänge im Frontend, die asynchron sind:
Prinzip der Compiler-Analyse + Code-Ausführung: 1. Der Compiler analysiert den Code nacheinander von oben nach unten 2. Bestimmen Sie, ob der Code synchron oder asynchron ist
3. Warten Sie, bis alle synchronen Ausführungen abgeschlossen sind, bevor Sie mit der asynchronen Ausführung beginnen Der Unterschied zwischen synchron und asynchronAPI: asynchron mit Rückruf, synchron ohne Rückruf Leistung: Asynchrone Leistung ist gut (blockiert keine Threads). Synchrone Leistung blockiert Threads. Reihenfolge: synchrone In-Order-Ausführung, asynchrone Out-of-Order-Ausführung Ein weiteres Beispiel: Callback-Funktion: Wenn der Parameter einer Funktion eine Funktion ist, dann wird dieser Parameter als Callback-Funktion bezeichnet. Geltungsbereich, AbschlussFunktionsumfangskette
Blockumfang 1. Ein 2. Für let wird der standardmäßige globale Gültigkeitsbereich auch als Blockbereich der Ebene 0 bezeichnet. Dann öffnen geschweifte Klammern zusätzlich zu Objekten neue Blockbereiche. Ebene 0 öffnet Ebene 1, Ebene 1 öffnet Ebene 2 und so weiter. 3. Es ist dasselbe wie die zuvor gelernte Funktionsumfangskette, außer dass der Funktionsumfang nur die Funktion ist, die den Funktionsumfang öffnet, der Blockumfang die geschweiften Klammern sind, die den Blockumfang öffnen, var den Funktionsumfang erkennt und let den Blockumfang erkennt VerschlüsseEin Abschluss ist eine Funktion. Funktionen, die Variablen innerhalb anderer Funktionen lesen können Codebeispiel: Funktion foo () { // foos interne Variable let num = 10 // Dieses Innere wird als Closure-Funktion bezeichnet inner() { console.log(Nummer) } } Wozu dienen Verschlüsse?
Es gibt einen Unterschied zwischen Abschlüssen und direkten RückgabewertenDie direkte Rückgabe eines Wertes gibt eigentlich nur die Daten dieses Wertes zurück. Nachfolgende Änderungen haben nichts mit den Variablen innerhalb der Funktion zu tun. Daher kann die Außenwelt mithilfe von Closures indirekt auf die Variablen innerhalb der Funktion zugreifen. Mehrere Möglichkeiten zum Schreiben von ClosuresEinfach ausgedrückt: Alles, was die Verschlusseigenschaften erfüllt, wird als Verschluss betrachtet Closure: ist eine Funktion, die es der Außenwelt ermöglicht, auf die internen Variablen der Funktion zuzugreifen Abschlusseffekt 1: Verlängerung des Lebenszyklus von VariablenLebenszyklus: bezieht sich auf den Zyklus von der Deklaration bis zur Vernichtung Der Lebenszyklus einer globalen Variable beginnt mit dem Öffnen einer Webseite und endet mit dem Ende der Webseite Der Lebenszyklus einer lokalen Variable beginnt und endet in dem Bereich, in dem sie sich befindet. Da Closures den Lebenszyklus von Variablen verlängern können, kann die Außenwelt weiterhin auf lokale Variablen zugreifen. Daher kann die übermäßige Verwendung von Closures zu Speicherlecks führen Speicherleck: Ein Datenelement wird nicht mehr benötigt, belegt jedoch weiterhin Speicherplatz und wurde nicht wiederverwendet. Lösung:
Schließungseffekt 2: ZugangsbeschränkungMachen Sie die Variable zu einer lokalen Variable, sodass von außen nicht direkt darauf zugegriffen werden kann Der Zugriff ist nur indirekt über den von uns geschriebenen Abschluss (die Brücke) möglich, sodass wir im Abschluss einige Einschränkungen vornehmen und so den Zweck der Zugriffsbeschränkung erreichen können. Vorsichtsmaßnahmen bei Abschluss des AnrufsBeachten: Die Häufigkeit, mit der die äußere Funktion, die den Abschluss generiert, aufgerufen wird, führt zur Generierung der gleichen Anzahl von Abschlüssen, und es werden zu diesem Zeitpunkt unterschiedliche Daten verarbeitet. Wenn die äußere Funktion, die den Abschluss generiert, einmal aufgerufen wird, wird nur ein Abschluss generiert und die verarbeiteten Daten bleiben dieselben. Closure löst das Problem von Indexfehlern, die durch die Verwendung von var verursacht werden<!DOCTYPE html> <html lang="de"> <Kopf> <meta charset="UTF-8"> <meta name="viewport" content="width=Gerätebreite, Anfangsmaßstab=1.0"> <title>Dokument</title> <Stil> ul { Listenstil: keiner; Polsterung: 0; Rand: 0; } li { Breite: 30px; Höhe: 30px; Hintergrundfarbe: gelb; Zeilenhöhe: 30px; Textausrichtung: zentriert; schweben: links; Rand rechts: 10px; } </Stil> </Kopf> <Text> <ul> <li>1</li> <li>2</li> <li>3</li> <li>4</li> <li>5</li> </ul> <Skript> // Gab es vorher „let“? Nein, also schauen wir mal, wie man das Indexproblem mit var löst // Finde alle li var lis = document.getElementsByTagName('li') für (var i = 0; i < lis.length; i++) { // Jetzt gibt es nur noch eine Variable in i, sodass beim letzten Klicken jeder ein i besucht // Der Endwert von i ist 5, also egal, wen Sie anklicken, es wird 5 sein // Lösung: Wenn ich 5 li habe, brauche ich 5 Variablen und die Werte der Variablen sind jeweils 0, 1, 2, 3, 4 // Wie können wir 5 verschiedene Variablen generieren? Wir müssen einen Funktionsumfang erstellen (function () { // Weil diese Schleife 5 selbstausführende Funktionen generiert // Das bedeutet, dass es 5 verschiedene Indexvariablen gibt // und ihre Werte müssen jeweils 0, 1, 2, 3, 4 sein, und die Werte von i sind genau 0, 1, 2, 3, 4 // Weisen Sie also einfach i dem Index zu var index = i // Füge jedem li ein Klickereignis hinzu lis[i].onclick = function () { Alarm (Index) } })() } </Skript> </body> </html> Wahlmaschine// Um eine Funktion zu erstellen, die abstimmen und die aktuelle Stimmenzahl abrufen kann, function votor() { // Es gibt eine Variable zum Speichern der Ticketanzahl let ticket = 0 zurückkehren { getTicket: Funktion () { console.log('Die aktuelle Anzahl der Tickets beträgt: ' + Ticket) }, // Abstimmung hinzufügen: Funktion () { Ticket++ } } } let tp = votor() tp.add() tp.add() tp.add() tp.add() tp.getTicket() Zwei Interviewfragen zu Closures// Frage 1: window.name = "Das Fenster"; let Objekt = { Name: "Mein Objekt", getNameFunc: Funktion () { Rückgabefunktion () { gib diesen Namen zurück; }; } }; Konsole.log(Objekt.getNameFunc()()); // Frage 2: window.name = "Das Fenster"; let Objekt = { Name: "Mein Objekt", getNameFunc: Funktion () { lass das = dies; Rückgabefunktion () { gib diesen Namen zurück; }; } }; Konsole.log(Objekt.getNameFunc() ()); Prototyp, PrototypenkettePrototyp-ObjektWirkung: Durch das Hinzufügen gemeinsamer Eigenschaften und Methoden im Konstruktor zum Prototypobjekt kann Speicher gespart werden Prototypenkette Unabhängig davon, von welchem Objekt Sie ausgehen, können Sie Object.prototype finden, indem Sie nach oben nach proto suchen. Diese Kette von Objekten, die mit Vollständiges Prototyp-KettendiagrammVoraussetzungen für die schematische Darstellung: Jedes Objekt hat ein Jedes Objekt hat eine Funktionen sind auch Objekte; Wenn ein Objekt keinen genauen Konstruktor zum Instanziieren hat, betrachten wir es als integrierten Konstruktor. Eine Instanz von Object; Der Prototyp von Object ist das Prototypobjekt der obersten Ebene und sein Funktion ist ein Konstruktor der obersten Ebene. Sie ist ihr eigener Konstruktor und ihr eigenes Instanzobjekt (in Laiensprache ausgedrückt: sie erstellt sich selbst). Schematische Darstellung des kompletten Prototyps: Oben finden Sie ausführliche Erläuterungen zum schwierigen synchronen und asynchronen Bereich, zum Closure-Prototyp und zur Prototypenkette von JS. Weitere Informationen zum synchronen und asynchronen Bereich, zum Closure-Prototyp und zur Prototypenkette von JS finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
<<: Zusammenfassung häufiger Probleme mit MySQL-Indizes
>>: Docker-Verbindung – MongoDB-Implementierungsprozess und Codebeispiele
Installationsumgebung: CentOS7 64-Bit, MySQL5.7 1...
Beim Speichern von Daten in MySQL werden manchmal...
Inhaltsverzeichnis Umfeld: 1. Docker ermöglicht d...
1. Verwenden Sie ein Centos-Image, um eine lokale...
Docker-Installation (Alibaba Cloud Server) Offizi...
Szenario: Mit zunehmender Datenmenge ist die Fest...
Beim Schreiben von Seiten stellen wir manchmal fe...
Vorwort Dieser Artikel stellt hauptsächlich die V...
Der erste Schritt beim Design ist immer die Optimi...
Discuz! Forum verfügt über zahlreiche Konfiguratio...
Ich bin heute auf ein kleines Problem gestoßen und...
In Fortsetzung des vorherigen Artikels erstellen ...
Inhaltsverzeichnis Erfordern Implementierungscode...
Manchmal müssen Sie auf einige statische Ressourc...
Ich habe kürzlich an einer Popup-Anzeige gearbeite...