Heim  >  Artikel  >  Web-Frontend  >  JavaScript verstehen

JavaScript verstehen

高洛峰
高洛峰Original
2016-11-26 09:31:54879Durchsuche

Einführung

In der Programmierwelt gibt es nur zwei Grundelemente: eines sind Daten und das andere ist Code. Die Welt der Programmierung zeigt unendliche Vitalität und Lebendigkeit in der untrennbaren Verflechtung von Daten und Code.

Daten sind von Natur aus ruhig und wollen immer ihre inhärente Natur bewahren, während Code von Natur aus lebendig ist und immer die Welt verändern möchte.

Sie sehen, die Beziehung zwischen Datencodes ist überraschend ähnlich der Beziehung zwischen Materie und Energie. Daten haben auch Trägheit, wenn es keinen Code gibt, der externe Kräfte ausübt, behalten sie immer ihren ursprünglichen Zustand bei. Code ist wie Energie. Der einzige Zweck seiner Existenz besteht darin, hart daran zu arbeiten, den ursprünglichen Zustand der Daten zu ändern. Wenn der Code die Daten ändert, wirkt sich dies aufgrund des Widerstands der Daten auch auf den ursprünglichen Trend des Codes aus oder ändert ihn. In einigen Fällen können Daten sogar in Code umgewandelt werden, und möglicherweise gibt es eine digitale Konvertierungsgleichung, die E = MC2 ähnelt. In dieser widersprüchlichen und dennoch einheitlichen Operation zwischen Daten und Code können sich jedoch immer die Gesetze der Computerwelt widerspiegeln. Diese Gesetze sind genau die Programmlogik, die wir schreiben.

Da jedoch verschiedene Programmierer unterschiedliche Weltanschauungen haben, sehen diese Daten und Codes unterschiedlich aus. Infolgedessen verwenden Programmierer mit unterschiedlichen Weltanschauungen ihre eigenen Methoden, um die Entwicklung und Entwicklung der Programmierwelt voranzutreiben.

Wie wir alle wissen, ist die objektorientierte Programmierung heute die beliebteste Programmieridee. Warum können objektorientierte Ideen in der Programmierwelt schnell populär werden? Denn objektorientiertes Denken verbindet erstmals Daten und Code zu einer Einheit und präsentiert sie Programmierern als einfaches Objektkonzept. Dies teilt plötzlich die ursprünglichen chaotischen Algorithmen und Unterprogramme sowie die verwickelten komplexen Datenstrukturen in klare und geordnete Objektstrukturen auf und klärt so den chaotischen Knoten aus Daten und Code in unserem Herzen. Wir können wieder klarer denken und die umfassendere Programmierwelt von einer anderen Denkebene aus erkunden.

Einen Tag nachdem der Fünfte Patriarch Hongren das „Objekt Wahre Sutra“ beendet hatte, sagte er zu allen seinen Schülern: „Ich habe zu Ende gesprochen. Ich denke, Sie sollten einige Einsichten haben. Bitte schreiben Sie jeweils eine Strophe zum Lesen.“ . ". Der älteste Schüler, Shenxiu, gilt als der älteste Bruder mit dem höchsten Verständnis. Sein Vers lautet: „Der Körper ist wie ein Objektbaum, und der Geist ist so hell wie seine Art. Wischen Sie ihn sorgfältig ab und lassen Sie ihn nicht fallen.“ staubig!" Sobald dieser Vers herauskam, sorgte er bei den Brüdern sofort für Aufsehen. Alle sagten, er sei so gut geschrieben. Nur der feuerköpfige Mönch Huineng seufzte leise, nachdem er es betrachtet hatte, und schrieb an die Wand: „Das Objekt hat keine Wurzeln und die Art ist unsichtbar. Es gibt überhaupt nichts, also wo kann es Staub verursachen?“ Dann schüttelte er den Kopf und ging weg. Jeder, der Hui Nengs Gatha las, sagte: „Es ist so durcheinander geschrieben, dass ich es nicht verstehen kann.“ Meister Hongren las Shenxius Vers und nickte lobend, dann schaute er sich Huinengs Vers an und schüttelte schweigend den Kopf. In dieser Nacht rief Hongren Huineng leise in seinen Meditationsraum, brachte ihm die Software-Schrift bei, die er seit vielen Jahren schätzte, und bat ihn dann, über Nacht im Mondlicht zu fliehen ...

Später tat Huineng es wirklich nicht Um den hohen Erwartungen des Meisters gerecht zu werden, schuf er einen weiteren riesigen Himmel für den Zen-Buddhismus im Süden. Eine der Software-Schriftstellen, die Huineng mitnahm, war die „JavaScript-Schrift“!

Zurück zur Einfachheit

Um JavaScript zu verstehen, müssen Sie zunächst die Konzepte von Objekten und Klassen loslassen und zu den Ursprüngen von Daten und Code zurückkehren. Wie bereits erwähnt, besteht die Programmierwelt nur aus zwei Grundelementen: Daten und Code, und diese beiden Elemente sind miteinander verknüpft. JavaScript vereinfacht Daten und Code auf das primitivste Niveau.

Daten in JavaScript sind sehr einfach. Es gibt nur fünf Arten einfacher Daten: undefiniert, null, boolesch, Zahl und Zeichenfolge, während es nur einen Typ komplexer Daten gibt, nämlich Objekte. Dies ähnelt dem klassischen chinesischen einfachen Materialismus, der die grundlegendsten Elemente der Welt in Metall, Holz, Wasser, Feuer und Erde einteilt und andere komplexe Substanzen aus diesen fünf Grundelementen bestehen.

Code in JavaScript wird nur in einer Form wiedergegeben, nämlich der Funktion.

Hinweis: Die oben genannten Wörter sind alle in Kleinbuchstaben geschrieben. Verwechseln Sie sie nicht mit in JavaScript integrierten Funktionen wie Zahl, Zeichenfolge, Objekt, Funktion usw. Sie wissen, die JavaScript-Sprache unterscheidet zwischen Groß- und Kleinschreibung!

Jeder JavaScript-Bezeichner, jede Konstante, jede Variable und jeder Parameter ist nur einer der Typen unfined, null, bool, number, string, object und function angegeben durch den Rückgabewert von typeof. Außer diesem gibt es keinen anderen Typ.

Lassen Sie uns zunächst über einfache Datentypen sprechen.

undefiniert: Stellt alle unbekannten Dinge dar, nichts, unvorstellbar, und der Code kann damit nicht umgehen.
Hinweis: Typeof (undefiniert) Rückgabe ist ebenfalls UNDEFINED.
Sie können jeder Variablen oder Eigenschaft undefiniert zuweisen. Dies bedeutet jedoch nicht, dass die Variable gelöscht wird, sondern es wird eine zusätzliche Eigenschaft hinzugefügt.

null: Es gibt ein Konzept, aber nichts. Es scheint etwas im Nichts und nichts in etwas zu sein. Obwohl es schwer vorstellbar ist, kann es bereits mit Code gehandhabt werden.
                                                                                                                                                                                                                                    Hinweis: typeof (null) gibt ein Objekt zurück, aber null ist kein Objekt und Variablen mit Nullwerten sind keine Objekte.

boolean: Ja ist, nein ist nein, es besteht kein Zweifel. Richtig ist richtig, falsch ist falsch, absolut klar. Es kann vom Code verarbeitet werden und kann auch den Codefluss steuern.

Anzahl: Lineare Dinge, klar in Größe und Ordnung, zahlreich, aber nicht chaotisch. Es erleichtert die Stapelverarbeitung von Code und steuert auch die Iteration und Schleife des Codes.
Hinweis: Typeof (nan) und Typeof (Infinity) geben beide eine Zahl zurück.
Die Struktur NaN, die an jeder numerischen Berechnung beteiligt ist, ist NaN und NaN != NaN.
Unendlich / Unendlich = NaN.

Zeichenfolge: Rationale Dinge für Menschen, keine Maschinensignale. Die Informationskommunikation zwischen Mensch und Computer, das Verständnis des Codes für menschliche Absichten usw. hängen alle davon ab.

Einfache Typen sind keine Objekte, und JavaScript verleiht diesen einfachen Typen nicht die Fähigkeit zur Objektivierung. Bezeichner, Variablen und Parameter, denen direkt konstante Werte einfacher Typen zugewiesen werden, sind keine Objekte.

Die sogenannte „Objektivierung“ ist die Fähigkeit, Daten und Code in komplexen Strukturen zu organisieren. In JavaScript bieten nur der Objekttyp und der Funktionstyp Objektivierungsfunktionen.

Keine Klasse

Objekt ist der Typ des Objekts. In JavaScript können Daten und Code, egal wie komplex sie sind, in Form von Objekten organisiert werden.

Aber JavaScript hat nicht das Konzept einer „Klasse“!

Für viele objektorientierte Programmierer ist dies wahrscheinlich die am schwierigsten zu verstehende Sache in JavaScript. Ja, in fast jedem objektorientierten Buch wird zunächst über das Konzept der „Klasse“ gesprochen, das die Säule der Objektorientierung darstellt. Plötzlich gibt es keine „Kategorie“ und wir haben das Gefühl, unsere spirituelle Unterstützung verloren zu haben und keinen Meister zu haben. Es scheint, dass es nicht einfach ist, Objekte und Klassen loszulassen und den Zustand zu erreichen, in dem „Objekte keine Wurzeln haben und Typen unsichtbar sind“.

Schauen wir uns also zunächst ein JavaScript-Programm an:
var life = {};
for(life.age = 1; life.age <= 3; life.age++)
{
switch(life.age)
{
case 1: life.body = "egg cell";
life.say = function(){alert(this.age+this.body)};
                                                                                   蚪";
. life.say = function() {alert(this.age+this.body+"-"+this.tail+","+this.gill)};
                                                                            🎜> life.legs = "Vier Beine";               Life.say = function(){alert(this. age+this.body+"-"+this.legs+","+this.lung)};
                                                 break; 🎜> Dieses JavaScript-Programm generierte zunächst ein Lebensobjekt, das Leben. Als das Leben geboren wurde, war es nur ein bloßes Objekt ohne Eigenschaften oder Methoden. Im ersten Lebensprozess verfügt es über ein Körperattribut und eine Sagenmethode, die wie eine „Eizelle“ aussieht. Während seines zweiten Lebens wuchsen ihm ein „Schwanz“ und „Kiemen“ an. Aufgrund der Schwanz- und Kiemenmerkmale handelte es sich offensichtlich um eine „Kaulquappe“. Während seines dritten Lebens verschwanden seine Schwanz- und Kiemenmerkmale, aber er bekam „vier Beine“ und „Lungen“, erwarb die Beine und Lungenmerkmale und wurde schließlich ein „Frosch“. Wenn Sie eine reiche Fantasie haben, können Sie daraus vielleicht einen hübschen „Prinzen“ machen und eine schöne „Prinzessin“ oder so heiraten. Nachdem Sie dieses Programm gelesen haben, denken Sie bitte über eine Frage nach:

Brauchen wir unbedingt Kurse?

Erinnern Sie sich noch an das Märchen aus Ihrer Kindheit über „die kleine Kaulquappe auf der Suche nach ihrer Mutter“? Vielleicht ist Ihr Kind gerade letzte Nacht in diesem wunderschönen Märchen eingeschlafen. Die niedliche kleine Kaulquappe wurde im Laufe der kontinuierlichen Weiterentwicklung ihrer eigenen Art nach und nach zur gleichen „Art“ wie ihre Mutter und fand so ihre Mutter. Die in diesem Märchen enthaltene Programmierphilosophie lautet: Die „Klasse“ eines Objekts entsteht von Grund auf, entwickelt sich weiter und verschwindet schließlich ...

„Klasse“ kann uns tatsächlich helfen, die komplexe reale Welt zu verstehen , diese chaotische reale Welt muss klassifiziert werden. Aber wenn unsere Gedanken an eine „Kategorie“ gebunden sind, wird die „Kategorie“ „müde“. Stellen Sie sich vor, wenn einem lebenden Objekt von Anfang an eine feste „Klasse“ zugewiesen wird, kann es sich dann noch weiterentwickeln? Kann sich eine Kaulquappe in einen Frosch verwandeln? Können Sie den Kindern auch die Geschichte einer Kaulquappe auf der Suche nach ihrer Mutter erzählen?

Daher gibt es in JavaScript keine „Klasse“. Klassen sind unsichtbar und in Objekte integriert. Gerade weil das Konzept der „Klasse“ aufgegeben wurde, haben JavaScript-Objekte eine Vitalität, die andere Programmiersprachen nicht haben.

Wenn Sie zu diesem Zeitpunkt anfangen, etwas tief in Ihrem Herzen zu spüren, dann haben Sie allmählich begonnen, das Zen von JavaScript zu verstehen.

Die Magie der Funktionen

Als Nächstes besprechen wir die Magie der JavaScript-Funktionen.

JavaScript-Code hat nur eine Form: Funktion, und Funktion ist der Typ der Funktion. Vielleicht haben andere Programmiersprachen Codekonzepte wie Prozeduren oder Methoden, aber in JavaScript gibt es nur eine Form von Funktionen. Wenn wir eine Funktion schreiben, erstellen wir einfach eine Entität vom Typ Funktion. Bitte schauen Sie sich das folgende Programm an:
function myfunc()
{
alarm("hello");
};

warning(typeof(myfunc));

Nachdem Sie diesen Code ausgeführt haben, können Sie sehen, dass „typeof(myfunc)“ die Funktion zurückgibt. Wir nennen die obige Funktionsschreibmethode „Definitionsformel“. Wenn wir sie in die folgende „Variablenformel“ umschreiben, ist sie leichter zu verstehen:
var myfunc = function ()
{
warning(“ hallo");
};

warning(typeof(myfunc));

Hier ist eine Variable myfunc klar definiert und ihr Anfangswert wird einer Funktionsentität zugewiesen. Daher gibt typeof(myfunc) auch eine Funktion zurück. Tatsächlich sind die Schreibmethoden dieser beiden Funktionen gleichwertig und bis auf ein paar kleine Unterschiede ist ihre interne Implementierung genau gleich. Mit anderen Worten, die von uns geschriebenen JavaScript-Funktionen sind nur benannte Variablen. Der Variablentyp ist eine Funktion und der Wert der Variablen ist der von uns geschriebene Funktionscode.

Wenn Sie schlau sind, fragen Sie vielleicht sofort weiter: Da Funktionen nur Variablen sind, können Variablen willkürlich Werte zugewiesen und überall verwendet werden???/p>

Nehmen wir mal Schauen Sie sich den folgenden Code an:
var myfunc = function ()
{
warning("hello");
};
myfunc(); //Das erste Mal, dass myfunc aufgerufen wird , Ausgabe Hallo

myfunc = function ()
{
warning("yeah");
};
myfunc(); //Der zweite Aufruf von myfunc wird yeah ausgeben

Das Ergebnis der Ausführung dieses Programms sagt uns: Die Antwort ist Ja! Nach dem ersten Aufruf der Funktion wird der Funktionsvariablen ein neuer Funktionscodekörper zugewiesen, sodass beim zweiten Aufruf der Funktion eine andere Ausgabe erscheint.

Okay, ändern wir den obigen Code in die erste definierte Funktionsform:
function myfunc ()
{
warning("hello");
};
myfunc (); // Hier myfunc aufrufen, yeah statt hello ausgeben

function myfunc ()
{
warning("yeah");
}; //Myfunc wird hier aufgerufen, und natürlich die Ausgabe yeah

Es liegt auf der Hand, dass zwei Funktionen mit genau derselben Signatur in anderen Programmiersprachen illegal sein sollten. Aber in JavaScript ist das wahr. Nach dem Ausführen des Programms wurde jedoch ein seltsames Phänomen entdeckt: Bei den beiden Aufrufen handelte es sich nur um die von der letzten Funktion ausgegebenen Werte! Offensichtlich macht die erste Funktion nichts. Warum ist das so?

Es stellt sich heraus, dass die JavaScript-Ausführungs-Engine das Programm nicht Zeile für Zeile analysiert und ausführt, sondern es Stück für Stück analysiert und ausführt. Darüber hinaus werden während der Analyse und Ausführung desselben Programms zuerst die definierenden Funktionsanweisungen extrahiert und ausgeführt. Nachdem die Funktionsdefinition ausgeführt wurde, werden nacheinander andere Anweisungscodes ausgeführt. Mit anderen Worten: Bevor myfunc zum ersten Mal aufgerufen wird, wurde die durch die erste Funktionsanweisung definierte Codelogik durch die zweite Funktionsdefinitionsanweisung überschrieben. Daher führen beide Aufrufe die letzte Funktionslogik aus.

Wenn Sie diesen JavaScript-Code beispielsweise in zwei Teile aufteilen, schreiben Sie sie in einen HTML-Code und verwenden Sie das