Warum
tatsächlich in endgültige Maschinenanweisungen umgewandelt werden
?Unabhängig davon, ob das von uns geschriebene JavaScript an den Browser oder den Knoten übergeben wird, muss es am Ende von der CPU ausgeführt werden. Daher benötigen wir die JavaScript-Engine, die uns dabei hilft, den JavaScript-Code in CPU- Anweisungen zu übersetzen, um
Hier besteht WebKit tatsächlich aus zwei Teilen:
WebCore: Verantwortlich für HTML-Parsing, Layout, Rendering und andere damit verbundene Arbeiten
JavaScriptCore: Analysieren und Ausführen von JavaScript-Code-
VO-Variablenobjekten (Variable Object). Im neuesten ECMA-Standard hat VO bereits einen anderen Namen für das
globale Objekt der Variablenumgebung VE GO (Clobal Object) und den globalen Ausführungskontext
AO (Activation Objece). ) umfasst
JavaScript weist uns beim Definieren von Variablen Speicher zu
JS weist während der Ausführung Speicher für grundlegende Datentypen direkt im Stapelbereich zu;
Durch die Speicherzuweisung von JS für komplexe Datentypen wird ein Speicherplatz im Heap-Speicher geöffnet, und die
, da die Speichergröße begrenzt ist benötigt, wir Es muss freigegeben werden, um mehr Speicherplatz freizugeben.
Garbage Collection heißt auf Englisch Garbage Collection oder GC.
Für Objekte, die nicht mehr verwendet werden, nennen wir sie Müll. Sie müssen recycelt werden, um mehr Speicherplatz freizugeben. Unsere Sprachlaufzeitumgebung, wie z. B. die Java-Laufzeitumgebung JVM und die JavaScript-Laufzeitumgebung JS-Engine, werden verwendet Speichermüllsammler. Garbage Collector, wir nennen es auch kurz GC, daher sieht man an vielen Stellen, dass sich GC tatsächlich auf den Garbage Collector bezieht.
In der Informatik ist die Definition von Closed (
Verschluss (englisch: Closure), auch bekannt als lexikalischer Verschluss (Lexical Closure) oder Funktionsverschluss (Funktionsverschluss);
Dabei handelt es sich um eine Technologie, die lexikalische Bindungen in Programmiersprachen implementiert, die erstklassige Funktionen unterstützen;
In der Implementierung ist der Abschluss eine Struktur, die eine Funktion und eine zugehörige Umgebung speichert (entspricht einer Symbol-Nachschlagetabelle).
Der größte Unterschied zwischen einem Abschluss und einer Funktion besteht darin, dass bei der Erfassung eines Abschlusses seine freien Variablen zum Zeitpunkt der Erfassung bestimmt werden, sodass er wie gewohnt ausgeführt werden kann, auch wenn er zum Zeitpunkt der Erfassung außerhalb des Kontexts
liegt Das Konzept der Schließung erschien in den 1960er Jahren. Das früheste Programm zur Implementierung von Schließungen war Scheme. Daher können wir verstehen, warum es Schließungen in JavaScript gibt.
Weil viele Designs in JavaScript von Scheme abgeleitet sind;
Werfen wir einen Blick auf die Erklärung von MDN zu JavaScript-Abschlüssen:
Eine Funktion wird mit einem Verweis auf ihren umgebenden Zustand (lexikalische Umgebung) gebündelt (oder die Funktion ist von Verweisen umgeben). Mit anderen Worten: Ein Abschluss ermöglicht den Zugriff innerhalb einer inneren Funktion seiner äußeren Funktion;
Wenn in JavaScript eine Funktion erstellt wird, wird der Abschluss gleichzeitig mit der Funktion erstellt.
function foo() {; var name = 'warum' var Alter = 18 Funktion bar() { console.log('bar',name) } return bar}var fun = foo()fun()
Zusammenfassung:
Eine gewöhnliche Funktion ist ein Abschluss, wenn sie auf die freien Variablen zugreifen kann, auf die die äußere Schicht einwirkt.
Aus einer breiten Perspektive: Funktionen in JavaScript sind Abschlüsse;
Aus enger Sicht: Wenn eine Funktion in JavaScript auf eine äußere Variable zugreift, handelt es sich um einen Abschluss,
auf den globalen Gültigkeitsbereich
Browser: Fenster
Knotenumgebung: {}
Die Pfeilfunktion ist eine Methode zum Schreiben von Funktionen, die nach ES6 hinzugefügt wurden, und ist prägnanter als Funktionsausdrücke.
Pfeilfunktionen binden dieses und die Argumentattribute nicht;
Pfeilfunktionen können nicht als Konstruktoren verwendet werden (können nicht mit neuen verwendet werden, es wird ein Fehler ausgegeben).
Funktion
übergebenen Parametern entspricht
In der funktionalen Programmierung gibt es ein sehr wichtiges Konzept namens reine Funktionen. JavaScript entspricht den Spezifikationen der funktionalen Programmierung, daher gibt es auch das Konzept der reinen Funktionen
in Wikipedia:
Wenn eine Funktion in der Programmierung die folgenden Bedingungen erfüllt, wird sie als reine Funktion bezeichnet. Wenn die Funktion denselben Eingabewert hat, muss sie dieselbe Ausgabe erzeugen. Die Ausgabe der Funktion hat nichts mit anderen versteckten Informationen zu tun oder andere Zustände als der Eingabewert. Funktionen, die nichts mit der externen Ausgabe zu tun haben, die von E/A-Geräten generiert wird, können keine semantisch beobachtbaren Funktionsnebenwirkungen haben, wie z. B. das Auslösen von Ereignissen, die Ausgabe von Ausgabegeräten oder das Ändern des Inhalts von Objekten, die keine Ausgabewerte sind . Zusammenfassung:
Entschlossener Input muss einen bestimmten Output erzeugen;
Bei der Ausführung einer Funktion können keine Nebenwirkungen auftreten;
JavaScript
Currying ist auch ein sehr wichtiges Konzept in der funktionalen Programmierung Wikipedia erklärt:
In der Informatik ist Currying (Currying), auch als Currying oder Currying übersetzt, eine Funktion, die mehrere Parameter akzeptiert, zu einer Funktion wird, die einen einzelnen Parameter (den ersten Parameter der ursprünglichen Funktion) empfängt und zurückgibt Eine neue Funktion, die akzeptiert verbleibende Argumente und gibt ein Ergebnis zurück Curry-Behauptung: Wenn Sie bestimmte Argumente korrigieren, erhalten Sie eine Funktionszusammenfassung
, die die verbleibenden Argumente akzeptiert:
Übergeben Sie nur einen Teil der Parameter an die Funktion, um sie aufzurufen, und lassen Sie sie einen Funktionsbereich zurückgeben, um die verbleibenden Parameter zu verarbeiten.
Dieser Vorgang wird Currying genannt.
Warum Currying notwendig ist:
Bei der funktionalen Programmierung hoffen wir oft, dass das von einer Funktion behandelte Problem so einfach wie möglich ist, anstatt einer Funktion viel Verarbeitung zu überlassen, um
die Funktion foo(x,y,c) {zu verarbeiten.
gib x + y + c zurück } console.log(foo(10,20,30)) //Curry-Funktion sum(x) { Rückgabefunktion(y) { Rückgabefunktion(z) { gib x + y + z zurück } } } var a = sum(10)(20)(30) console.log(a) //Currying vereinfachen var sum2 = x => y => z => { gib x + y + z zurück } console.log(sum2(10)(20)(30))
Funktion (Compose) ist eine Technik und ein Modus zur Verwendung von Funktionen in der JavaScript-Entwicklung:
Beispielsweise müssen wir nun eine Funktion für bestimmte Daten aufrufen und zwei Funktionen fn1 und fn2 ausführen. Wenn wir jedes Mal zwei Funktionen aufrufen müssen, ist dies möglich diese beiden Funktionen kombinieren und nacheinander automatisch aufrufen?
Dieser Prozess ist die Kombination von Funktionen, die wir „Funktion erstellen“
mit „
,
die with-Anweisung zu verwenden, da dies zu Verwirrungsfehlern und Kompatibilitätsproblemen führen kann
'} // var message = "Hallo Welt" Funktion foo() { Funktionsleiste () { mit(obj2) { console.log(Nachricht) } } Bar() } foo()
eval ist eine spezielle Funktion, die den eingehenden String als JavaScript-Code ausführen kann
var strFn = 'var message = "Hello world"(message);'; eval(strFn)
Es wird nicht empfohlen, eval in der Entwicklung zu verwenden:
Die Lesbarkeit des Evaluierungscodes ist sehr schlecht (die Lesbarkeit des Codes ist ein wichtiges Prinzip für qualitativ hochwertigen Code).
eval ist eine Zeichenfolge und kann daher während der Ausführung manipuliert werden, wodurch das Risiko eines Angriffs besteht.
Die Ausführung von eval muss über den JS-Interpreter erfolgen und von der JS-Engine optimiert werden. Der
Modus ist ein restriktiver JavaScript-Modus, der dazu führt, dass der Code implizit vom „schlampigen Modus“ abweicht. Wenn Browser, die den strikten Modus unterstützen, den strikten Modus im Code erkennen, überwachen und führen sie den Code strenger aus. Der strikte Modus eliminiert einige ursprüngliche stille Fehler, sodass die Js-Engine weitere Optimierungen durchführen kann beim regelmäßigen Ausführen von Code (keine Notwendigkeit, sich mit einer speziellen Syntax zu befassen)
"use strict"; // Strikten Modus aktivieren var message = "hello world" console.log(message)
Strikte Modus-Einschränkungen <br/ > Hier sprechen wir über einige strenge Syntaxbeschränkungen im strikten Modus:
JavaScript ist so konzipiert, dass es für unerfahrene Entwickler einfacher ist, damit zu beginnen. Daher wird manchmal davon ausgegangen, dass eine falsche Syntax normal analysiert wird. Im strikten Modus werden solche Fehler jedoch als Fehler behandelt, sodass
// 1. Erstelle versehentlich eine globale Variable message = „Hallo Welt“ console.log(Nachricht) Funktion foo() { Alter=20 } foo()Der strikte Modus
von Console.log(age)
//Standardmäßiger statischer Fehler true.name ='xiaoluo'; NaN = 123
// Funktionsparameter dürfen nicht denselben Namen haben function foo(x,y,x) { console.log(x,y,x)}foo(10,20,30)
var num = 0o123 // Oktal var num2 = 0x123 // Hexadezimal console.log(num,num2)
var obj2 = {name:'Tom',age:18,message:'obj2'}ist nicht zulässig
mit(obj2) { console.log(Nachricht) }
var für die obere Ebene strFn = 'var message = "Hello world"(message);'; eval(strFn)Im strikten Modus
console.log(message)
Funktion foo() {. console.log(this) //undefiniert } foo()