js-Interviewfragen
1. js-Datentyp
Grundlegende Datentypen Number, String, Boolean, Null, Undefiniert, Symbol, bigInt Referenzdatentypen object, Array, Date, Function, RegExp2. Verbesserung der JS-Variablen- und Funktionsdeklarationen
In js wird die Deklaration von Variablen und Funktionen nach oben heraufgestuft. Die Ausführungsfunktion wird höher heraufgestuft als die Variable. Wenn eine externe Variable mit demselben Namen innerhalb der Funktion deklariert wird, sucht die Funktion nicht mehr nach oben. Anonyme Funktionen werden nicht aktiviert.3. Schließung
Ein Abschluss ist eine Funktion, die die internen Variablen anderer Funktionen lesen kann. Vorteile: Sie kann die Variablen innerhalb der Funktion lesen und die privaten Eigenschaften kapseln Nachteile des Objekts: Die unsachgemäße Verwendung des Speichers kann zu Problemen mit dem Speicherüberlauf führen4. Der Unterschied zwischen == und ===
== ist im nicht strengen Sinne gleich. Der Datentyp und die Wertgröße beider Seiten werden verglichen Die Adresse ist nur dann gleich, wenn sie gleich sind.5. das
Dies zeigt immer auf den direkten Aufrufer der Funktion. Wenn es ein neues Schlüsselwort gibt, zeigt dies auf das Objekt, das aus new hervorgeht. Im Falle eines Ereignisses zeigt dies auf das Objekt, das das Ereignis ausgelöst hat.6. So durchlaufen Sie js-Arrays und -Objekte
für inforforEachfor-of7. Der Unterschied zwischen Map und forEach
Die forEach-Methode ist die grundlegendste Methode, nämlich das Durchlaufen und Schleifen. Standardmäßig werden drei Parameter übergeben: das durchquerte Array-Inhaltselement, der Array-Indexindex und die aktuelle durchquerte Array-Arraymap-Methode , aber anders. Es wird ein neues Array zurückgegeben, daher muss der Rückruf einen Rückgabewert haben. Andernfalls wird undefiniert zurückgegeben.8. Was ist der Unterschied zwischen Pfeilfunktionen und gewöhnlichen Funktionen?
Das Objekt this im Funktionskörper ist das Objekt, in dem es definiert ist, nicht das Objekt, in dem es verwendet wird. Das heißt, der neue Befehl kann nicht verwendet werden, da sonst ein Fehler auftritt geworfen. Das Argumentobjekt kann nicht verwendet werden. Das Objekt existiert nicht im Funktionskörper. Wenn Sie es verwenden möchten, können Sie stattdessen den Rest-Parameter verwenden. Der Yield-Befehl kann nicht verwendet werden, sodass die Pfeilfunktion nicht als Generatorfunktion verwendet werden kann.9. Same-Origin-Strategie
Homologie bezieht sich auf denselben Domänennamen, dasselbe Protokoll und dieselbe Portnummer.10. So lösen Sie domänenübergreifende Probleme
jsonp domänenübergreifend document.domain + domänenübergreifend iframe nodejs Middleware-Proxy domänenübergreifend Backend legt den sicheren Domänennamen in den Header-Informationen fest11. Einschränkungen des strikten Modus
Variablen müssen vor der Verwendung der Funktion deklariert werden. Andernfalls wird ein Fehler gemeldet. Die with-Anweisung kann nicht verwendet werden, um zu verhindern, dass dies auf das globale Objekt verweist.12. Neu in es6
Neue Vorlagenzeichenfolge-Pfeilfunktion for-of (wird zum Durchlaufen von Daten verwendet, z. B. Werte in einem Array). ES6 integriert Promise-Objekte in die Spezifikation und stellt native Promise-Objekte bereit. Let- und const-Befehle zum Deklarieren von Variablen hinzugefügt. Es gibt auch die Einführung des Konzepts des Modulmoduls13. Was ist der Unterschied zwischen Attribut und Eigenschaft?
attribute ist das Attribut, das das dom-Element als HTML-Tag im Dokument hat. property ist das Attribut, das das dom-Element als Objekt in js hat. Bei den Standardattributen von HTML werden Attribut und Eigenschaft synchronisiert und automatisch aktualisiert. Bei benutzerdefinierten Attributen erfolgt jedoch keine Synchronisierung.14. Was ist der Unterschied zwischen let und const?
Es gibt keine Variablenheraufstufung im let-Befehl, wenn er vor let verwendet wird. Wenn im Blockbereich let- und const-Befehle vorhanden sind, wird ein geschlossener Bereich gebildet und Const definiert eine Konstante und kann nicht geändert werden. Wenn die Definition jedoch Objekt ist, können Sie die Daten innerhalb des Objekts ändern15. Speicherverlust
Definition: Verschiedene Probleme, die dadurch verursacht werden, dass das Programm den Heap-Speicher, der im Programm dynamisch zugewiesen wurde, aus irgendeinem Grund nicht freigibt oder nicht freigeben kann. Mögliche Speicherlecks in js: Ergebnis: Verlangsamung, Absturz, große Verzögerung usw. Mögliche Ursachen für Speicherlecks in js Wenn die globale Variable dom gelöscht wird, liegt immer noch ein Speicherverlust vor, der durch das Vorhandensein untergeordneter Elemente verursacht wird, die nicht gelöscht werden der Referenztimer.16. Wie führt man ein Skript ein?
html static <script> führt die dynamische Einfügung von js ein <script><script defer>: asynchrones Laden, wird nach Abschluss der Elementanalyse ausgeführt <script async>: asynchrones Laden, aber das Rendern von Elementen wird während der Ausführung blockiert17. Array-Methode
Karte: Durchlaufen Sie das Array und geben Sie ein neues Array zurück, das aus Callback-Rückgabewerten besteht. forEach: Kann nicht unterbrochen werden. Sie können „throw new Error“ in „try/catch“ verwenden, um den Filter zu stoppen: „Einige filtern“: Wenn ein Element „true“ zurückgibt, ist das Ganze „trueevery“: Wenn ein Element false zurückgibt, ist der Gesamtwert falsejoin: Erzeugen Sie eine Zeichenfolge durch Angabe des Connectors push/pop: push and pop am Ende, ändern Sie das ursprüngliche Array, geben Sie das Push/pop-Element zurück unshift/shift: push and pop at Kopf, ändern Sie das ursprüngliche Array und geben Sie die Operation item sort (fn) / reverse zurück: Sortieren und umkehren, ändern Sie das ursprüngliche Array. concat: Verbinden Sie das Array, ohne das ursprüngliche Array zu beeinträchtigen. Flaches Kopieren von Slice (Start, Ende): Zurückgeben Neues Array abschneiden, ohne das ursprüngliche Array zu ändern splice(start,number, value...): Gibt ein Array zurück, das aus gelöschten Elementen besteht, value ist das eingefügte Element, ändert das ursprüngliche Array indexOf / lastIndexOf(value, fromIndex): findet das Array-Element und gibt den entsprechenden Index zurück. Reduce / ReduceRight(fn(prev, cur), defaultPrev) : Paarweise ausgeführt, prev ist der Rückgabewert der letzten vereinfachten Funktion, cur ist der aktuelle Wert (beginnend mit dem zweiten Element)18. Tiefe und flache JavaScript-Kopie?
Flache Kopie Object.assign tiefe Kopie kann durch JSON.parse(JSON.stringify(object)) gelöst werden19. Sprechen Sie über die Implementierung der asynchronen Programmierung?
Vorteile der Rückruffunktion: einfach und leicht verständlich. Nachteile: nicht wartungsfreundlich, hohe Codekopplung. Ereignisüberwachung. Vorteile: leicht verständlich, kann mehrere Ereignisse binden. Jedes Ereignis kann mehrere Rückruffunktionen angeben. Nachteile: ereignisgesteuert, der Prozess ist nicht Klar genug für Release /Subscription (Beobachtermodus) ähnelt dem Abhören von Ereignissen, aber Sie können das „Message Center“ verwenden, um zu erfahren, wie viele Herausgeber und Abonnenten es jetzt gibt. Vorteile des Promise-Objekts: Sie können die Methode then verwenden, um in a zu schreiben Kette; Sie können Rückrufe schreiben, wenn Fehler auftreten. Funktionsnachteile: relativ schwer zu schreiben und zu verstehen. Vorteile der Generatorfunktion: Datenaustausch innerhalb und außerhalb des Funktionskörpers, Fehlerbehandlungsmechanismus. Nachteile: unbequeme Prozessverwaltung. Vorteile der asynchronen Funktion: integrierter Executor, bessere Semantik , breitere Anwendbarkeit, Rückgabe Was ist Versprechen, klare Struktur Nachteile: Fehlerbehandlungsmechanismus20. Sprechen Sie über objektorientierte Programmierideen?
Die Grundidee besteht darin, grundlegende Konzepte wie Objekte, Klassen, Vererbung und Kapselung zum Entwerfen von Programmen zu verwenden. Die Vorteile sind einfache Wartung und Erweiterung, hohe Wiederverwendbarkeit und Vererbung der Entwicklungsarbeit sowie ein geringerer Arbeitsaufwand durch Duplizierung. Verkürzter Entwicklungszyklus21. Optimierung der Projektleistung
Reduzieren Sie die Anzahl der HTTP-Anfragen. Verwenden Sie CDN, um umgeleitete Bilder zu vermeiden. Reduzieren Sie die Anzahl der DOM-Elemente. usw. Optimieren Sie CSS Sprite. Teilen Sie den Inhalt so weit wie möglich in verschiedene Domänennamen auf, vermeiden Sie leere Bildquellen, fügen Sie das Stylesheet in den Link ein und fügen Sie unten JavaScript ein der Seite.22. Was ist ein einzelner Thread und seine Beziehung zu asynchronem Thread?
Einzelner Thread: Es gibt nur einen Thread, der nur eines tun kann. Um Konflikte beim DOM-Rendering zu vermeiden, muss die DOM-Struktur beim Ausführen des Browsers angehalten werden zwei Teile von JS und können nicht gleichzeitig ausgeführt werden (beide sind DOM-Konflikte). Webworker unterstützt Multithreading, kann jedoch nicht auf DOM zugreifen. Lösung: asynchron23. Sprechen Sie über Lastausgleich?
Einzelne Server arbeiten zusammen, um zu verhindern, dass einer oder mehrere von ihnen überlastet werden, und maximieren die Rolle des Servers für den Lastausgleich bei der HTTP-Umleitung: Der Scheduler wählt den Server gemäß der Richtlinie aus, um auf die Anfrage mit 302 zu antworten Hat nur beim ersten Mal und bei nachfolgenden Vorgängen eine Auswirkung. Behalten Sie den DNS-Lastausgleich auf diesem Server bei: Greifen Sie beim Auflösen von Domänennamen auf einen von mehreren IP-Servern zu (schwache Überwachbarkeit). Grund – DOM-Rendering-Konflikte vermeiden. Reverse-Proxy-Lastausgleich: Greifen Sie auf einen einheitlichen Server zu. und der Server plant den Zugriff. Ein tatsächlicher Server erfordert einen einheitlichen Server, und seine Leistung wird durch die Anzahl der Servergruppen beeinflusst.24. Scope-Kette?
Die Bereichskette kann als eine Reihe von Objektlisten verstanden werden, einschließlich des übergeordneten Objekts und seiner eigenen Variablenobjekte, sodass wir über die Bereichskette auf die im übergeordneten Objekt deklarierten Variablen oder Funktionen zugreifen können25. Was sind Prototypen, Prototypenketten und Vererbung?
Alle Funktionen verfügen über ein Prototypattribut (Prototyp). In Javascript verfügt jede Funktion über ein Prototypattribut, das auf ihren eigenen Prototyp verweist, und das von dieser Funktion erstellte Objekt verfügt auch über ein Protoattribut, das auf diesen verweist. Prototyp, und der Prototyp einer Funktion ist ein Objekt, daher wird dieses Objekt auch einen Proto haben, der auf seinen eigenen Prototyp zeigt, und dieser wird Schicht für Schicht tiefer gehen, bis der Prototyp des Objektobjekts entsteht, wodurch eine Prototypenkette gebildet wird.26. Was ist der JS-Garbage-Collection-Mechanismus? 1. Übersicht
Der Garbage-Collection-Mechanismus von js soll Speicherlecks verhindern (ein Teil des Speichers, der nicht mehr benötigt wird, ist immer noch vorhanden, der Garbage-Collection-Mechanismus sucht kontinuierlich nach diesen Variablen, die nicht mehr verwendet werden, und gibt den Speicher frei, auf den er verweist). In JS ist die Ausführungsumgebung von JS für die Verwaltung des während der Codeausführung verwendeten Speichers verantwortlich.
2. Der Lebenszyklus von Variablen
Wenn der Lebenszyklus einer Variablen endet, wird der Speicher, auf den sie verweist, freigegeben. JS verfügt über zwei Arten von Variablen: Lokale Variablen und globale Variablen wirken sich auf die aktuelle Funktion aus. Wenn die Funktion endet, bleiben globale Variablen bestehen, bis der Browser geschlossen wird.
3. Es gibt zwei Methoden der js-Garbage Collection: Markierungslöschung und Referenzzählung.
Mark Sweep: Die meisten Browser verwenden diese Art der Garbage Collection. Wenn eine Variable in die Ausführungsumgebung gelangt (deklariert), markiert der Garbage Collector die Variable erneut, um sie zu löschen.
Referenzzählung: Diese Methode verursacht häufig Speicherverluste, hauptsächlich in Browsern niedrigerer Versionen. Sein Mechanismus besteht darin, die Anzahl der Referenzen auf einen bestimmten Wert zu verfolgen. Wenn eine Variable deklariert und der Variablen ein Referenztyp zugewiesen wird, wird die Anzahl der Referenzen um 1 erhöht. Wenn die Variable auf einen anderen zeigt, erhöht sich die Anzahl der Referenzen wird um 1 dekrementiert. Wenn es 0 ist, startet der Recyclingmechanismus.
27. Progressive Verbesserung und anmutige Degradierung
Durch die progressive Verbesserung werden Seiten für Browser mit niedriger Version erstellt, um die grundlegendsten Funktionen sicherzustellen. Anschließend werden Effekte und Interaktionen verbessert und zusätzliche Funktionen für Browser mit hoher Version hinzugefügt, um eine bessere Benutzererfahrung zu erzielen. Anmutiges Downgrade: Erstellen Sie von Anfang an die vollständige Funktionalität und machen Sie sie dann mit Browsern niedrigerer Versionen kompatibelFragen zum Vue-Interview
1. Vorteile von vue
Leicht, schnell, leicht zu erlernen, geringe Kopplung, wiederverwendbar, unabhängige EntwicklungDie Dokumentation ist vollständig und die Dokumentation ist auf Chinesisch
2. Die übergeordnete Vue-Komponente übergibt Daten an untergeordnete Komponenten
Requisiten3. Untergeordnete Komponenten übergeben Ereignisse an übergeordnete Komponenten
$emittieren4. Gemeinsame Punkte und Unterschiede zwischen V-Show- und V-IF-Anweisungen
Ähnliche Punkte: Beide können das Anzeigen und Ausblenden von DOM-Elementen steuern.
Der Unterschied: v-show ändert nur das Anzeigeattribut, das Dom-Element verschwindet nicht und es ist nicht erforderlich, die Seite beim Umschalten erneut zu rendern.
v-if löscht das dom-Element direkt von der Seite. Ein erneuter Wechsel erfordert ein erneutes Rendern der Seite.
5. So sorgen Sie dafür, dass CSS nur in der aktuellen Komponente funktioniert
umfangreich6. Welche Funktion hat <keep-alive></keep-alive>?
Wird hauptsächlich zum Zwischenspeichern von Komponenten verwendet, die häufig gewechselt werden müssen, ohne dass die Seite erneut gerendert werden muss.7. So erhalten Sie Dom
Fügen Sie ref='refname' zum dom-Element hinzu und rufen Sie dann das dom-Element über this.$refs.refname ab
8. Nennen Sie mehrere Anweisungen in Vue und deren Verwendung
V-Modell
v-on
v-html
V-Text
v-einmal
v-wenn
V-Show
9. Was ist Vue-Loader? Wofür wird es verwendet?
Ein Loader für Vue-Dateien, der template/js/style in js-Module konvertiert
Zweck: js kann ES6- und Stilstile schreiben
10. Warum Schlüssel verwenden?
Fügen Sie jedem DOM-Element einen Schlüssel als eindeutigen Bezeichner hinzu. Der Diff-Algorithmus kann diesen Knoten korrekt identifizieren und das Rendern der Seite beschleunigen.11. Axios und Installation?
Das Axios-Plugin ist erforderlich, wenn Ajax in einem Vue-Projekt verwendet wird
Laden Sie die Methode cnpm install axios --save herunter
12. Verwendung des V-Modells
Das V-Modell wird für die bidirektionale Bindung von Formularen verwendet und kann Daten in Echtzeit ändern.13. Bitte teilen Sie mir die Verwendung jedes Ordners und jeder Datei im src-Verzeichnis im vue.cli-Projekt mit.
Komponenten speichern Komponenten
Eingang zur Hauptseite von app.vue
index.js-Hauptdateieintrag
ass speichert statische Ressourcendateien
14. Beschreiben Sie kurz die Nutzungsszenarien von Computer und Uhr.
Um einen Satz von der offiziellen Website zu verwenden: Alles, was berechnet werden muss, sollte berechnete Eigenschaften verwenden. Wenn sich mehrere Daten auf ein Datenelement auswirken, verwenden Sie berechnete Eigenschaften und den Szenen-Warenkorb.
Wenn sich eine Datenänderung auf mehrere Daten auswirkt, verwenden Sie „Watch“ und das Szenensuchfeld.
15. Kann v-on mehrere Methoden überwachen?
Ja, zum Beispiel v-on="onclick,onbure"16. Verwendung von $nextTick
Nach der Änderung in data() können die geänderten Daten nicht auf der Seite abgerufen werden. Bei Verwendung von $nextTick kann die Seite in Echtzeit gerendert werden, wenn die Daten in data geändert werden.17. Warum müssen Daten in der Vue-Komponente eine Funktion sein?
Aufgrund der Eigenschaften von JavaScript müssen Daten in Komponenten in Form einer Funktion vorliegen und dürfen kein Objekt sein.
Die Daten in der Komponente werden als Funktion geschrieben und die Daten werden in Form eines Funktionsrückgabewerts definiert, sodass bei jeder Wiederverwendung der Komponente neue Daten zurückgegeben werden, was bedeutet, dass jede Komponenteninstanz ihre eigenen hat Privater Datenraum und seine Werte. Verantwortlich für die individuelle Pflege der Daten, ohne Verwirrung zu stiften. Wenn sie einfach in Objektform geschrieben werden, teilen alle Komponenteninstanzen dieselben Daten. Wenn also eine Instanz geändert wird, werden alle Instanzen geändert.
18. Verständnis des progressiven Rahmens
Befürworten Sie am wenigsten
Je nach Bedarf können verschiedene Ebenen ausgewählt werden
19. Wie implementiert Vue die bidirektionale Datenbindung?
Die bidirektionale Datenbindung von Vue wird durch Datenhijacking, Kombination und Veröffentlichungs-Abonnement-Modus implementiert. Das heißt, Daten und Ansicht werden synchronisiert. Wenn sich die Ansicht ändert, ändern sich auch die Daten .
Kern: Der Kern der bidirektionalen Datenbindung von Vue ist die Methode Object.defineProperty()
20. Unterschiede und Nachteile zwischen einseitigen und mehrseitigen Anwendungen
Eine Single-Page-Anwendung (SPA) bezieht sich für Laien auf eine Anwendung mit nur einer Hauptseite. Der Browser lädt alle JS-, HTML- und CSS-Dateien von Anfang an. Der gesamte Seiteninhalt ist auf dieser Hauptseite enthalten. Beim Schreiben wird es jedoch immer noch separat geschrieben, und beim Schützen wird das Routing-Programm dynamisch geladen, es werden Einzelseitensprünge durchgeführt und nur lokale Ressourcen aktualisiert. Wird hauptsächlich auf dem PC verwendet.
Mehrseitig (MPA) bedeutet, dass eine Anwendung mehrere Seiten enthält und die gesamte Seite aktualisiert wird, wenn die Seite springt.
Vorteile einer einzelnen Seite: Die Benutzererfahrung ist gut und schnell, und Inhaltsänderungen erfordern kein Neuladen der gesamten Seite. Dadurch wird der Druck auf den Server durch Spa verringert, und der Seiteneffekt wird verringert Kühler.
Nachteile einer einzelnen Seite: Nicht förderlich für SEO; Navigation ist nicht möglich. Wenn Sie vorwärts und rückwärts navigieren müssen. Das erste Laden nimmt viel Zeit in Anspruch; die Komplexität der Seite nimmt stark zu.
21. Warum ist es notwendig, einen Schlüssel in die Listenkomponente im Vue-Projekt zu schreiben, und welche Funktion hat er? Der Schlüssel ist die eindeutige ID, die jedem Vnode zugewiesen wird. Sie können sich auf den Schlüssel verlassen, um den entsprechenden Vnode-Knoten in oldVnode genauer und schneller zu erhalten.
Dies ist genauer, da es mit dem Schlüssel keine direkte Wiederverwendung gibt. Beim Vergleich der sameNode-Funktion a.key === b.key kann die direkte Wiederverwendung vermieden werden. Es wird also genauer sein. Es ist schneller, die Eindeutigkeit des Schlüssels zu nutzen, um ein Kartenobjekt zu generieren und den entsprechenden Knoten zu erhalten, was schneller ist als die Traversal-Methode.22. Wie ist die Ausführungsreihenfolge der Lebenszyklus-Hooks von übergeordneten und untergeordneten Komponenten?
Rendervorgang ladenübergeordnetes Element vor Erstellung -> übergeordnetes Element erstellt -> übergeordnetes Element vor Mount -> untergeordnetes Element vor Erstellung -> untergeordnetes Element erstellt -> untergeordnetes Element vor Mount -> untergeordnetes Element bereitgestellt -> übergeordnetes Element bereitgestellt
Aktualisierungsprozess der UnterkomponenteÜbergeordnetes vorUpdate -> Untergeordnetes vorUpdate -> Untergeordnetes aktualisiert -> Übergeordnetes aktualisiert
Aktualisierungsprozess der übergeordneten Komponenteübergeordnetes Element vor Update -> übergeordnetes Element aktualisiert
ZerstörungsprozessEltern vor Zerstörung -> Kind vor Zerstörung -> Kind zerstört -> Eltern zerstört
23. Erzählen Sie mir, wie Sie nextTick verstehen? Wenn Sie den Wert von Daten ändern und dann sofort den Wert des DOM-Elements abrufen, können Sie den aktualisierten Wert nicht abrufen. Sie müssen den $nextTick-Rückruf verwenden, um den geänderten Datenwert vor dem erfolgreichen Abrufen auf das DOM-Element rendern und aktualisieren zu lassen . .
24. Warum müssen Daten in der Vue-Komponente eine Funktion sein? Aufgrund der Eigenschaften von JavaScript müssen Daten in Komponenten in Form einer Funktion vorliegen und dürfen kein Objekt sein. Die Daten in der Komponente werden als Funktion geschrieben und die Daten werden in Form eines Funktionsrückgabewerts definiert, sodass bei jeder Wiederverwendung der Komponente neue Daten zurückgegeben werden, was bedeutet, dass jede Komponenteninstanz ihre eigenen hat Sie sind nur für die Pflege ihrer eigenen Daten verantwortlich, ohne Verwirrung zu stiften. Wenn sie einfach in Objektform geschrieben werden, teilen alle Komponenteninstanzen dieselben Daten, sodass sich durch die Änderung einer von ihnen alle ändern.
25. Der Unterschied zwischen vue und jQuery. jQuery verwendet den Selektor ($), um DOM-Objekte auszuwählen und Vorgänge wie Zuweisung, Werterfassung, Ereignisbindung usw. auszuführen. Tatsächlich besteht der einzige Unterschied zu nativem HTML darin, dass es bequemer ist DOM-Objekte auswählen und bedienen, während Daten und Schnittstelle zusammenpassen. Wenn Sie beispielsweise den Inhalt des Label-Tags $("lable").val(); abrufen müssen, hängt dies immer noch vom Wert des DOM-Elements ab. Vue trennt Daten und View vollständig durch Vue-Objekte. Um Daten zu bearbeiten, müssen Sie nicht mehr auf das entsprechende DOM-Objekt verweisen. Man kann sagen, dass Daten und Ansicht durch das Vue-Objekt, die VM, miteinander verbunden sind. Dies ist das legendäre MVVM.
26. Der Unterschied zwischen delete und Vue.delete beim Löschen eines Arrays. Durch Löschen werden nur die gelöschten Elemente leer/undefiniert. Die Schlüsselwerte anderer Elemente bleiben unverändert. Vue.delete löscht das Array direkt und ändert den Schlüsselwert des Arrays.
27. So lösen Sie das langsame Laden des ersten SPA-Bildschirms durch die Installation der für dynamisches Lazy Loading erforderlichen Plug-Ins.
28. Packt das Vue-Projekt eine JS-Datei, eine CSS-Datei oder mehrere Dateien? Gemäß der vue-cli-Gerüstspezifikation eine JS-Datei und eine CSS-Datei.
29. Methoden zum Auslösen von Ansichtsaktualisierungen, wenn Vue ein Array aktualisiert.
30. Was ist der Vue-Lebenszyklus? Was macht es? Jede Vue-Instanz muss bei ihrer Erstellung eine Reihe von Initialisierungsprozessen durchlaufen – zum Beispiel muss sie die Datenüberwachung einrichten, Vorlagen kompilieren, die Instanz im DOM bereitstellen und das DOM aktualisieren, wenn sich die Daten ändern usw. Gleichzeitig werden während dieses Prozesses auch einige Funktionen ausgeführt, die als Lebenszyklus-Hooks bezeichnet werden und Benutzern die Möglichkeit geben, in verschiedenen Phasen ihren eigenen Code hinzuzufügen.
31. Welche Hooks werden ausgelöst, wenn die Seite zum ersten Mal geladen wird? beforeCreate, erstellt, beforeMount, gemountet
32. Vue erhält im Allgemeinen Daten, in denen eine Periodenfunktion erstellt wird, bevor der Mount bereitgestellt wird
33. Der Unterschied zwischen erstellt und gemountet: erstellt: Wird aufgerufen, bevor die Vorlage in HTML gerendert wird, dh bestimmte Attributwerte werden normalerweise initialisiert und dann in eine Ansicht gerendert. mount: Wird aufgerufen, nachdem die Vorlage in HTML gerendert wurde, normalerweise nach Abschluss der Initialisierungsseite, und führt dann einige erforderliche Vorgänge am DOM-Knoten des HTML aus.
34. Das Verständnis des Vue-Lebenszyklus ist in 8 Phasen unterteilt: vor/nach der Erstellung, vor/nach dem Laden, vor/nach der Aktualisierung und vor/nach der Zerstörung. Vor/nach der Erstellung: In der Phase beforeCreated sind das Mount-Element $el und die Datenobjektdaten der Vue-Instanz beide undefiniert und wurden nicht initialisiert. In der Erstellungsphase sind die Datenobjektdaten der Vue-Instanz verfügbar, $el jedoch nicht. Vor/nach dem Laden: In der beforeMount-Phase werden $el und Daten der Vue-Instanz initialisiert, aber der virtuelle Dom-Knoten davor ist noch gemountet und data.message wurde nicht ersetzt. In der gemounteten Phase wird die Vue-Instanz gemountet und data.message erfolgreich gerendert. Vor/nach dem Update: Wenn sich Daten ändern, werden die Methoden „beforeUpdate“ und „update“ ausgelöst. Vor/nach der Zerstörung: Nach der Ausführung der Zerstörungsmethode lösen Änderungen an den Daten die periodische Funktion nicht mehr aus. Dies zeigt an, dass die Vue-Instanz die Ereignisüberwachung und Bindung an das DOM freigegeben hat, die DOM-Struktur jedoch weiterhin vorhanden ist.
35. Was ist Vuex? Zustandsverwaltung im Vue-Framework.
36. Was sind die Merkmale von Vuex? Es gibt fünf Typen: Status, Getter, Mutation, Aktion, Modulstatus: Basisdaten (Speicherort der Datenquelle) Getter: von Basisdaten abgeleitete Datenmutationen: Methoden zum Übermitteln geänderter Daten, Synchronisierung! Aktionen: Wie ein Dekorateur, der Mutationen so verpackt, dass sie asynchron sein können. Module: Modular Vuex
37. Vue-Familien-Bucket vue-cli, vuex, vueRouter, Axios
38. Welche npm-Befehle werden häufig in Vue-Cli-Projekten verwendet?
npm install ist der Befehl zum Herunterladen des Ressourcenpakets „npm run dev“ zum Starten der vue-cli-Entwicklungsumgebung. vue-cli ist der npm-Befehl zum Generieren der Bereitstellungsressourcen für die Produktionsumgebung. Der Bericht wird zum Anzeigen der Ressourcendateien für die Bereitstellung der Vue-CLI-Produktionsumgebung mit dem Befehl size npm verwendet39. Bitte teilen Sie mir den Zweck jedes Ordners und jeder Datei im vue-cli-Projekt mit.
Im Build-Ordner werden einige Erstkonfigurationen des Webpacks gespeichert. Der Konfigurationsordner speichert einige Projektinitialisierungskonfigurationen. Das von npm geladene src-Verzeichnis wird zum Platzieren von Bildkomponenten verwendet .vue ist die Projekteintragsdatei main.js des Projekts40. Was ist der Unterschied zwischen v-if und v-show?
Was sie gemeinsam haben: Sie alle zeigen DOM-Elemente dynamisch an oder löschen sie im DOM-Baum. v-show steuert die Anzeige und Ausblendung durch Festlegen des Anzeigestilattributs des DOM-Elements. Wenn Switches einen teilweisen Kompilierungsvorgang haben, zerstören und erstellen Sie die internen Ereignis-Listener und Unterkomponenten ordnungsgemäß während des Switching-Prozesses. V-Show ist nur ein einfacher Switching-Leistungsverbrauch, der auf CSS basiert. V-If hat höhere Switching-Kosten Szenario v-if ist für Betriebsbedingungen geeignet, bei denen es unwahrscheinlich ist, dass sich v-show ändert41. Welche Prioritäten haben v-for und v-if? Wenn v-for und v-if gleichzeitig verwendet werden, haben sie eine höhere Priorität als v-for. if, was bedeutet, dass v-for eine höhere Priorität hat als v-if. Die Beurteilung von v-if wird jedes Mal in jeder Schleifenzuweisung aufgerufen. Daher wird nicht empfohlen, v-if und v-for gleichzeitig zu verwenden im selben Etikett.
42. Häufig verwendete Modifikatoren in Vue? Ereignismodifikatoren
.stop verhindert, dass sich Ereignisse weiter verbreiten.prevent verhindert das Standardverhalten von Tags.capture verwendet den Ereigniserfassungsmodus, d. h. vom Element selbst ausgelöste Ereignisse werden hier zuerst verarbeitet und dann nur zur Verarbeitung an interne Elemente übergeben.self Wenn event.target das aktuelle Element ist, wird die Handlerfunktion ausgelöst, wenn das Ereignis selbst nur einmal ausgelöst wird. Passiv teilt dem Browser mit, dass Sie das Standardverhalten des Ereignisses nicht verhindern möchten.Modifikatoren für das V-Modell
.lazy verwendet diesen Modifikator, um den Benutzereingabewert automatisch in einen numerischen Typ umzuwandeln und die vom Benutzer eingegebenen Leerzeichen erneut zu synchronisieren.Modifikator für Tastaturereignisse
.enter.tab.delete (erfasst die Tasten „Löschen“ und „Rücktaste“).esc.space.up.down.left.rightSystemmodifikator
.ctrl.alt.shift.metaModifikator für Maustasten
.links.rechts.mitte43. Wie verwende ich Ereignisobjekte in Vue-Ereignissen?
Rufen Sie das Ereignisobjekt ab und übergeben Sie $event als Methodenparameter. Beachten Sie, dass das $-Symbol im Ereignis-<button @click="Event($event)">Ereignisobjekt</button> verwendet wird44. Welche Methoden zur Komponentenwertübertragung gibt es?
Übergabe vom übergeordneten Element an das untergeordnete Element: Die untergeordnete Komponente erhält den Wert des Attributs xx, das von der übergeordneten Komponente über props['xx'] übergeben wurde. Übergabe vom untergeordneten Element an das übergeordnete Element: Die untergeordnete Komponente übergibt ihn über this.$emit('fnName',value) , und die übergeordnete Komponente empfängt das fnName-Ereignis. Andere Möglichkeiten, Rückrufe zu empfangen: durch Erstellen eines Busses und Übergeben von Werten mithilfe von Vuex45. Wie ruft eine untergeordnete Komponente die übergeordnete Komponente in Vue auf?
Rufen Sie die Methode der übergeordneten Komponente direkt über this.$parent.event in der untergeordneten Komponente auf. Verwenden Sie $emit() in der untergeordneten Komponente, um ein Ereignis für die übergeordnete Komponente auszulösen, und die übergeordnete Komponente kann dieses Ereignis abhören. Die übergeordnete Komponente übergibt die Methode an die untergeordnete Komponente und die Methode wird direkt in der untergeordneten Komponente aufgerufen.46. Wie kann ich dafür sorgen, dass CSS nur in der aktuellen Komponente funktioniert? Fügen Sie vor dem Stil in der Komponente „scoped“ hinzu
47. So erhalten Sie dom?ref="domName" Verwendung: this.$refs.domName
48. Vue-Routing-Sprung
(1) Deklarativer Navigations-Router-Link
Ohne Parameter: // Hinweis: Wenn der Link in router-link mit „/“ beginnt, beginnt er bei der Root-Route. Wenn er nicht mit „/“ beginnt, beginnt er bei der aktuellen Route. <router-link :to="{name:'home'}"> <router-link :to="{path:'/home'}"> //Es wird empfohlen, sowohl Name als auch Pfad zu verwenden mit Parametern:< router-link :to="{name:'home', params: {id:1}}"><router-link :to="{name:'home', Abfrage: {id:1} }"> < router-link :to="/home/:id"> //Objekt übertragen<router-link :to="{name:'detail', query: {item:JSON.stringify(obj)}} "></router-link>(2) this.$router.push()
Ohne Parameter: this.$router.push('/home')this.$router.push({name:'home'})this.$router.push({path:'/home'})Abfrageparameter 1. Routing-Konfiguration: Name: 'home', Pfad: '/home' 2. Springen: this.$router.push({name:'home',query: {id:'1'}})this.$ router.push ({path:'/home',query: {id:'1'}})3. Parameter abrufen HTML-Parameter: $route.query.idscript Parameter: this.$route.query.idparams Parameter 1. Routing-Konfiguration: Name : 'home', Pfad: '/home/:id' (oder Pfad: '/home:id') 2. Springen: this.$router.push({name:'home', params: {id:'1 '}}) Hinweis: // Sie können nur Namen verwenden, um Routen abzugleichen, und keine Pfadparameter // verwenden, um Parameter zu übergeben (ähnlich wie bei Post). Routing-Konfigurationspfad: „/home/:id“ oder Pfad: „/home :id " Andernfalls verschwindet der Aktualisierungsparameter. 3. Rufen Sie den Parameter HTML-Parameter ab: $route.params.id Skriptparameter: this.$route.params.id Übergeben Sie den Parameter direkt über Pfad 1. Routenkonfiguration: Name: 'home', Pfad: '/home/:id' 2. Springen: this.$router.push({path:'/home/123'}) oder: this.$router.push('/home/123') 3. Parameter abrufen: Der Unterschied zwischen this.$route.params.idparams und query ähnelt get. Nach dem Sprung wird die Seiten-URL mit Parametern gespleißt, ähnlich wie bei ?id=1. Unwichtige können auf diese Weise übergeben werden, Passwörter und ähnliches verwenden weiterhin Parameter und die ID ist weiterhin vorhanden, wenn die Seite aktualisiert wird. Parameter ähneln Posts und werden nach dem Sprung nicht nach der Seiten-URL gespleißt.(3) this.$router.replace()
Die Verwendung ist die gleiche wie oben(4) this.$router.go(n)
Springe n Seiten vorwärts oder rückwärts, n kann eine positive oder negative ganze Zahl seinder unterschied:
this.$router.push springt zum angegebenen URL-Pfad und fügt einen Datensatz im Verlaufsstapel hinzu. Durch Klicken auf „Zurück“ kehren Sie zur vorherigen Seite zurück. this.$router.replace springt zum angegebenen URL-Pfad, es wird jedoch kein Datensatz vorhanden sein Verlaufsstapel. Klicken Sie auf Zurück, um zur vorherigen Seite zu springen (dh die aktuelle Seite direkt zu ersetzen). this.$router.go(n) Springt n Seiten vorwärts oder rückwärts, n kann eine positive ganze Zahl oder eine negative ganze Zahl sein49. Das Prinzip der bidirektionalen Bindung von Vue.js. Vue.js 2.0 verwendet Daten-Hijacking (Proxy-Modus) in Kombination mit dem Publisher-Subscriber-Modus (PubSub-Modus), um die Setter und Getter jeder Eigenschaft über Object.defineProperty() zu kapern. Veröffentlichen Sie Nachrichten an Abonnenten, wenn sich Daten ändern, und lösen Sie entsprechende Rückrufe aus.
Jede Komponenteninstanz verfügt über eine entsprechende Watcher-Programminstanz, die die Eigenschaften während des Komponentenrenderings als Abhängigkeiten aufzeichnet. Wenn der Setter der Abhängigkeit später aufgerufen wird, wird der Watcher zur Neuberechnung aufgefordert, wodurch die zugehörigen Komponenten aktualisiert werden.
Vue.js 3.0 hat Object.defineProperty aufgegeben und den schnelleren nativen ES6-Proxy (Access Object Interceptor, auch Proxy genannt) verwendet.
50. Der Unterschied zwischen Computed und Watch
Berechnetes berechnetes Attribut: Hängt von anderen Attributwerten ab, und der berechnete Wert wird nur dann zwischengespeichert.
Watch Hörer: Es handelt sich eher um eine Beobachtungsfunktion, ohne das Überwachung der Überwachung bestimmter Daten.
Anwendungsszenarien:
Wenn wir numerische Berechnungen durchführen und auf andere Daten angewiesen sind, sollte berechnet werden, da die Cache -Funktion von berechnet verwendet werden kann, um jedes Mal neu zu berechnen, wenn der Wert erhalten wird. Die Uhr sollte verwendet werden, wenn wir asynchrone oder teure Vorgänge ausführen müssen, wenn die Datenveränderung verwendet wird. Endergebnis. Dies sind Dinge, die berechnete Eigenschaften nicht tun können. Wenn mehrere Faktoren eine Anzeige beeinflussen, verwenden Sie berechnet.Der Unterschied zwischen Computer und Methoden
Berechnet: Berechnete Eigenschaften werden anhand ihrer Abhängigkeiten zwischengespeichert und werden nur dann neu bewertet, wenn sich ihre zugehörigen Abhängigkeiten ändern.51. Filter
Verwenden Sie Filter in Vue to Filter (Format). Anzeige.52. Axios ist eine benutzerfreundliche, prägnante und effiziente HTTP-Bibliothek.
53. Was ist Sass? Wie installiere und benutze ich es in Vue? SASS ist eine vorkompilierte CSS -Sprache.
Verwenden Sie NPM, um Lader zu installieren (Sass-Lader, CSS-Lader usw. Lader). Konfigurieren Sie den SASS -Loader in webpack.config.js. 54. Vue.js Page blinkt Vue.js liefert eine V-Cloak-Richtlinie, die auf dem Element bleibt, bis die zugehörige Instanzkompilierung beendet. Bei Verwendung mit CSS verbirgt diese Anweisung unkompilierte Tags, bis die Instanz zusammengestellt ist. Die Verwendung ist wie folgt. [v-cloak] {display: keine;} <div v-cloak> {{title}} </div>55. Wie man das Problem der zu tiefen Datenstruktur löst. Sie können vm. $ set manuell definiert eine Datenebene: vm. $ set ("Demo", ABCD)
56. VUE GROSSE Anweisungen
V-Model wird hauptsächlich für Formularelemente verwendet , die als @abgekürzt werden kann, zum Beispiel, um eine Klickfunktion zu binden, muss die Funktion in den Methoden V-for-Format geschrieben werden: v-for = "Feldname in (von) Array JSON" -Sload-Array oder JSON (gleiche wie NG-Repeat in Winkel) V-Show-Anzeigegehalt (gleich wie ng-show in winkel) V-Hide-Ausblenden-Inhalt (gleiche wie ng-hide in eckel) v-If Show und Hide (Deletion und Zugabe von DOM-Elementen sind die gleichen Als ng-wenn in Angular ist der Standardwert falsch) v-else-wenn muss in Verbindung mit V-IF V-ELSE in Verbindung mit V-IF verwendet werden und kann nicht allein verwendet werden, andernfalls ist ein Fehler Meldes Vorlagenkompilierungsfehler V-Text analysieren Text Rot: "isred"}, {blau: "isBlue"}] 'V-Once Renders Nur einmal rendert beim Eingeben der Seite nicht mehr V-Clak, um zu verhindern57. Der Unterschied zwischen $ Route und $ Router
$ route ist ein "Routing -Informationsobjekt", einschließlich Pfad-, Parameter, Hash, Abfrage, FullPath, übereinstimmend, Name und anderen Routing -Informationsparametern. $ router ist das Objekt "Routing -Instanz", einschließlich Routing -Sprungmethoden, Hakenfunktionen usw.58. Wie man den einzelnen Datenfluss von Vues versteht
Die Daten werden immer von der übergeordneten Komponente an die untergeordnete Komponente übergeben. Dies verhindert, dass die untergeordnete Komponente den Zustand der übergeordneten Komponente versehentlich ändert, wodurch der Datenfluss Ihrer Anwendung schwer verständlich ist. HINWEIS: Direkt mit V-Model zur Bindung der von der übergeordneten Komponente an die Kinderkomponente übergebenen Requisiten ist eine unregelmäßige Schreibweise, und die Entwicklungsumgebung wird eine Warnung melden. Wenn Sie den Requisitenwert der übergeordneten Komponente wirklich ändern möchten, können Sie eine Variable in Daten definieren, mit dem Prop -Wert initialisieren und dann $ emit verwenden, um die übergeordnete Komponente zu benachrichtigen, um ihn zu ändern.59. Was ist virtuelles Dom? Was sind die Vor- und Nachteile? Weil es teuer ist, das DOM im Browser zu manipulieren. Häufige Operationen am DOM verursachen bestimmte Leistungsprobleme. Dies ist der Grund für die Erstellung von virtuellem DOM. VUE2s virtuelles DOM stützt sich auf die Implementierung der Open -Source -Bibliothek Snabbdom. Die Essenz von virtuellem DOM besteht darin, ein natives JS -Objekt zu verwenden, um einen Dom -Knoten zu beschreiben, bei dem es sich um eine Abstraktionsebene des realen DOM handelt.
Vorteile: 1. Garantierte Leistung Untergrenze: Das virtuelle DOM des Frameworks muss sich an alle Operationen anpassen, die von der API der oberen Schicht erzeugt werden können. ; Im Vergleich zum Rohöl ist die DOM -Betriebsleistung von DOM viel besser, so 2. Wir müssen die DOM nicht manuell bedienen. Auf eine vorhersehbare Weise, was die Effizienz erheblich verbessert. 3. plattformübergreifend: Virtual DOM ist im Wesentlichen ein JavaScript-Objekt, und DOM ist stark mit der Plattform verwandt. Nachteile: 1. Unfähigkeit, eine endgültige Optimierung durchzuführen: Obwohl virtuelle DOM + angemessene Optimierung ausreicht, um die Leistungsanforderungen der meisten Anwendungen zu decken, kann virtuelle DOM in einigen Anwendungen mit extrem hohen Leistungsanforderungen keine gezielte ultimative Optimierung durchführen. 2. Bei der erstmaligen Rendern einer großen Menge DOM ist es aufgrund einer zusätzlichen Schicht DOM -Berechnung langsamer als die Innerhtml -Einfügung.60. Wie kann man das Problem des Datenverlusts lösen, wenn die Vuex -Seite aktualisiert wird?
Vuex-Daten Persistenz sind im Allgemeinen erforderlich, um Daten zu speichern. Es wird empfohlen, das Vuex-Persist-Plug-In zu verwenden, das ein Plug-In für Vuex Persistent Speicher ist. Sie müssen nicht manuell auf den Speicher zugreifen, sondern den Status direkt auf Cookies oder LocalStorage speichern.61. Warum muss Vuex in Module unterteilt und Namespaces hinzufügen?
Modul: Aufgrund der Verwendung eines einzelnen Zustandsbaums werden alle Zustände der Anwendung in ein relativ großes Objekt konzentriert. Wenn eine Anwendung sehr komplex wird, können Speicherobjekte ziemlich aufgebläht werden. Um die oben genannten Probleme zu lösen, ermöglicht Vuex den Speicher in Module. Jedes Modul hat seinen eigenen Zustand, Mutation, Handlung, Gettter und sogar verschachtelte Submodul.
Namespace: Standardmäßig sind Aktionen, Mutationen und Getter innerhalb eines Moduls im globalen Namespace registriert - dies ermöglicht es mehreren Modulen, auf dieselbe Mutation oder Aktion zu reagieren. Wenn Sie möchten, dass Ihr Modul über einen höheren Grad an Kapselung und Wiederverwendbarkeit verfügt, können Sie es zu einem benannten Modul machen, indem Sie den Namespace: True hinzufügen. Wenn ein Modul registriert ist, werden alle Getters, Aktionen und Mutationen nach dem vom Modul registrierten Pfad automatisch benannt.
62. Welche Entwurfsmuster werden in Vue verwendet?
1. Fabrikmodus - Übergeben Sie die Parameter, um ein Instanz -virtueller DOM zu erstellen und den VNODE des Basis -Tags und der Komponenten -VNODE gemäß verschiedenen Parametern zurückzugeben. 2. Singleton-Modus-Das gesamte Programm verfügt über eine und nur eine Instanz. 3. Model veröffentlichen. (Vue -Ereignismechanismus) 4. Beobachtermuster. (Responsive Data Principle) 5. Dekoratormodus (Verwendung von @Decorator) 6. Strategiemodus bedeutet, dass das Objekt ein bestimmtes Verhalten hat, aber in unterschiedlichen Szenarien hat das Verhalten unterschiedliche Implementierungslösungen - wie Optionen für die Verschmelzung.63. Welche Leistungsoptimierungen haben Sie für Vue gemacht? Hier listen wir nur die Leistungsoptimierung für VUE auf.
Machen Sie die Objekthierarchie nicht zu tief, andernfalls wird die Leistung schlecht sein. Setzen Sie keine Daten in Daten ein (Sie können die Daten einfrieren, um die Daten zu frieren) Ein Schlüssel beim Durchlaufen und der Schlüssel ist der beste ID -Wert und vermeiden Sie es, V -IF gleichzeitig zu verwenden, und die Optimierung der Tabellenleistung - virtuelle Liste/virtuelle Tabelle, um interne Lecks zu verhindern, globale Variablen und Zeit nach der Zerstörung der Komponenten zu zerstören. Image Lazy Loading Routing, Lazy Loading Asynchronous Routing-Plug-In-Plug-in-Einsatz-Einsatz.64. Prinzip der VUE.SET -Methode: Das Ändern von VUE wird in zwei Fällen nicht die Aktualisierung der Ansicht ausgelöst.
1. Fügen Sie der Instanz nach dem Erstellen der Instanz neue Attribute hinzu (fügen Sie dem responsiven Objekt Attribute hinzu). 2. Ändern Sie direkt das Array -Index, um den Array -Wert zu ändern. Das Prinzip von Vue.set oder $ set lautet wie folgt. Wenn ein nicht existierendes Attribut zu einem Objekt hinzugefügt wird, wird das neue Attribut zunächst reaktionsmäßig verfolgt und der von der DEP des Objekts OB gesammelten Beobachter zum Aktualisieren ausgelöst. das Array selbst, um das Array zu aktualisieren.65. Nutzungsszenarien und Prinzipien der funktionalen Komponenten.
1. Funktionskomponenten müssen bei der Deklaration der Komponente angeben. 2. Es ist keine Instanziierung erforderlich, so Funktion und berechnete Eigenschaften können nicht verwendet werden. In extern bezogen über Ref referenziert sich die tatsächlichen Referenz, es ist HTMLElement6. $ attrs und automatisch montiert.Vorteile: 1. Da Funktionskomponenten nicht so instanziiert werden müssen, dass sie nicht zu einem Lebenszyklus verfügen, ist die Rendering -Leistung besser als gewöhnliche Komponenten.
Nutzungsszenarien:
Eine einfache Anzeigekomponente, die als Containerkomponente wie Router-View verwendet wird, ist eine funktionale Komponente. "Komponente höherer Ordnung" - verwendet, um eine Komponente als Parameter zu akzeptieren und eine verpackte Komponente zurückzugeben. Der entsprechende Code lautet wie folgt:
if (iStrue (ctor.options.functional)) {// diejenigen mit funktionalen Attributen sind funktionale Komponenten return createFunctionAlalComponent (CTOR, PropsData, Daten, Kontext, Kinder);} const Listener = Daten.on; ;66. Warum können untergeordnete Komponenten die von der übergeordnete Komponente übergebene Prop nicht ändern? Alle Requisiten bilden eine Einweg-Abwärtsbindung zwischen ihren übergeordneten und untergeordneten Requisiten: Updates aus der übergeordneten Prop fließen nach unten zur untergeordneten Komponente, aber nicht umgekehrt. Dies verhindert, dass die untergeordnete Komponente den Zustand der übergeordneten Komponente versehentlich ändert, wodurch der Datenfluss Ihrer Anwendung schwer verständlich ist.
67. Vue -Projekterstellung. Routing -Konfiguration, Umgebungskonfiguration, Komponentenwerttransfer usw.
CSS, HTML -Interviewfragen
Was ist der Unterschied zwischen HTML und HTML5?
Es gibt drei Hauptunterschiede:
1. Dokumenterklärung Unterschied
HTML: Hypertext-Markup-Sprache, eine klare Text-Sprache.
HTML5.0: Das Dokument besagt, dass HTML5 leicht zu schreiben, zu optimieren und für das schnelle Lesen und die Entwicklung durch Programmierer zu fördern ist.
2. Unterschiede in der strukturellen Semantik
HTML: Tags, die keine strukturelle Semantik widerspiegeln, wie: <div id = "nav"> </div>
HTML5: Es wurde viele semantische Tags hinzugefügt, wie z.
3.. Unterschiede in der Zeichnung
HTML: Bezieht sich auf skalierbare Vektorgrafiken, die vektorbasierten Grafiken, die zur Definition des Web verwendet werden.
HTML5: Das Canvas -Element von HTML5 verwendet Skripte (normalerweise verwendet JavaScript), um Bilder auf der Webseite zu zeichnen und jedes Pixel der Leinwand zu steuern.
Was ist ein Kastenmodell?
Wir werden eine Box in mehrere Teile teilen: Inhalt, Polster, Rand und Rand.Wie versteht man die HTML5 -Semantik?
HTML Semantic Tag -Header - Titel Navigation - Navigation Artikel - Artikelabschnitt - Abschnitt oder Absatz beiseite - Seitenleiste Fußzeile - FußzeileWas sind die Vorteile der Semantik?
In Ermangelung von CSS-Code kann die Inhaltsstruktur und die Codestruktur gut dargestellt werden (damit Nicht-Techniker den Code verstehen können), um die Benutzererfahrung zu verbessern. vorteilhaft zu SEO. Die Semantik kann eine bessere Verbindung zu Suchmaschinen herstellen. (Browser) 1. Cookie (1) Es wird zur Kommunikation zwischen dem Client und dem Server (2) verwendet und modifizieren Sie es (4) Nachteile von Cookies für die Speicherung ① Die Speicherkapazität ist zu klein, nur 4 KB ② Alle HTTP -Anforderungen werden durchgeführt, was die Effizienz des Ressourcenerwerbs beeinflusst. ③ Die API ist einfach und muss für das Verwenden von Dokument verkauft werden. Cookie 2. LocalStorage, SessionStorage (1) HTML5 -Spezialisierung für die Speicherung, die maximale Kapazität beträgt 5 m (2) Die API ist einfach und einfach zu verwenden (3) lcoalStorage.setItem (Schlüssel, Wert); LocalStorage.GetItem (Schlüssel); (4) In iOS Safari versteckten Modus: LocalStorage.getItem einen Fehler, Vorschläge für die Einheit der Try-Catch-Kapselung. und die Daten werden beim Ende der Sitzung zerstört. Daher handelt es sich bei sessionStorage nicht um einen dauerhaften lokalen Speicher, sondern nur um einen Speicher auf Sitzungsebene. LocalStorage wird für den anhaltenden lokalen Speicher verwendet. Was sind die gemeinsamen Browser -Kerne? ** Trident -Kernel: ** bedeutet, dass der Browser IE -Browser ist, sodass der Trident -Kernel auch als E -Kernel bezeichnet wird.** Gecko Core: ** repräsentiert der Browser ist Firefox -Browser. Der Gecko-Kernel ist Open Source, und sein größter Vorteil ist, dass er plattformübergreifend sein kann.
Webkit: Webkit Kernel: Der repräsentative Browser ist Safari (Apple's Browser) und eine niedrigere Version von Google Chrome, einem Open -Source -Projekt.
** PRESTO CORE: ** repräsentiert den Browser -Oper -Browser (Chinesisch als "offener Browser"). Der Kern wurde veraltet.
** Blink Core: ** Von Google und Opera entwickelt, veröffentlicht im April 2013, der aktuelle Chrome Core ist Blink.
Sprechen Sie über Ihr Verständnis von Webstandards und W3C?
Webstandards:
Webstandards sind hauptsächlich in drei Teile unterteilt: Struktur, Leistung und Verhalten.
Struktur: Bezieht sich auf die Tags, die wir normalerweise im Körper schreiben, die hauptsächlich aus HTML -Tags bestehen
Leistung: Bezieht sich auf reichere HTML -Tag -Stile, die hauptsächlich aus CSS -Stilen bestehen
Verhalten: Bezieht sich auf die Interaktion zwischen der Seite und dem Benutzer, der hauptsächlich aus JS -Teil besteht
W3c:
W3C hat standardisierte Anforderungen für Webstandards vorgelegt, nämlich Codespezifikationen.
strukturelle Anforderungen
1. Etikettenbuchstaben sollten Kleinbuchstaben sein
2. Das Etikett sollte geschlossen werden
3. Tags dürfen nicht willkürlich verschachtelt werden
Leistungs- und Verhaltensanforderungen
1. Es wird empfohlen, externe Link -CS- und JS -Skripte zu verwenden, um die Trennung von Struktur und Leistung, Struktur und Verhalten zu erreichen, wodurch die Renderneffizienz der Seite verbessert und den Webinhalt schneller angezeigt wird.
Wie implementieren Sie das Reaktionslayout von Browser?
Verwenden Sie Medienabfragen (@media), verwenden Sie Flex -Layout, verwenden Sie prozentuale Einheiten, verwenden Sie REM -Einheiten und verwenden Sie VH- und HW -Einheiten.CSS -Selektoren und Prioritäten verstehen?
Häufig verwendete CSS -Selektoren
ID-Selektor, Klassenauswahl, Tag-Selektor, Attributauswahl, Pseudo-Klasse-Selektor, Nachkommenswähler
Gewichtsabteilung
Auf der gleichen Ebene:
! Wichtig> Inline-Stil> ID-Selektor> Klassenauswahl> (Tag-Selektor, Pseudo-Klasse-Selektor, Attributauswahl)
Auf verschiedenen Ebenen:
Je höher der Gewichtswert ist, desto höher ist die Priorität, desto höher ist jedoch keine spezifische Abteilung für Gewichtswert. Bei den meisten aktuellen Entwicklungen ist die Priorität, je tiefer das Niveau, desto höher.
Sprechen Sie über Ihr Verständnis von Reflow und Neuausziehung?
Was ist Reflow?
Der Reflow tritt auf, wenn die Breite, Höhe, Layout, Anzeige oder Versteck eines Elements selbst oder die Textstruktur innerhalb des Elements ändert, wodurch die Seite umgebaut werden muss.Was ist Repaint?
Neuausziehung tritt auf, wenn sich die Breite, Höhe, Layout, Anzeige oder Versteck eines Elements selbst nicht geändert hat, sondern nur der Aussehensstil des Elements.
Wann findet der Reflow statt? Wenn ein sichtbares DOM -Element hinzugefügt oder gelöscht wird, ändert sich die Position des Elements, die Größe des Elements ändert sich, der Inhalt ändert sich und wenn die Seite zum ersten Mal gerendert wird.
Wann findet das Repaint statt?
Listen Sie einige verwandte CSS-Stile auf: Farbe, Hintergrund, Hintergrundgröße, Sichtbarkeit, Box-Shadow
Was ist der Unterschied zwischen Deckkraft: 0, Sichtbarkeit: versteckt und Anzeige: Keine?
Opazität = 0, das Element ist versteckt, aber das Seitenlayout wird nicht geändert.
Sichtbarkeit = verborgen, das Element ist versteckt, aber das Seitenlayout wird nicht geändert, aber die an das Element gebundenen Ereignisse werden nicht ausgelöst.
Anzeige = Keine versteckt das Element und ändert das Seitenlayout.
CSS -Präprozessor
Weniger SassWas ist der Unterschied zwischen Titel und Alt von <img>?
Wenn die Maus über ein Element glättet, wird ALT ein eindeutiges Attribut von <img> und eine äquivalente Beschreibung des Bildinhalts ist, um Bilder anzuzeigen, die nicht geladen werden können, und die Bildschirmleser für die Lesung von Bildern. Es kann die Zugänglichkeit von Bildern verbessern.Was sind Inline-Elemente und Elemente auf Blockebene? Zu welchem Element gehört IMG?
Adresse - Adressblockquote - Blockreferenzzentrum - Center -Alignment Block DIR - Verzeichnisliste Div - häufig verwendete Blockebene, auch die Hauptkennzeichnung des CSS -Layout -DL - Definitionsliste Fieldset - Formularkontrollgruppenformular - Interaktives Formular H1 - Überschrift H2 - Untertitel H3 - Stufe 3 Überschriften H4 - Stufe 4 Überschriften H5 - Stufe 5 Überschriften H6 - Stufe 6 HR - Horizontal Separator Line Issidex - Eingabeaufforderung - Menüliste NoFrames - Rahmen optional Content NOScript - Optionales Skriptinhalt (dieser Inhalt wird für Browser angezeigt, die das Skript nicht unterstützen) OL - Ordnungsgeschäft P - Absatz Pre - Formatierte Texttabelle - Tabelle UL - Unbestraftete Liste
A - Anchor Point ABBR - Abkürzung Akronym - Erster Buchstabe B - BOLD (nicht empfohlen) BDO - BIDI Override Big - Large Font BR - Zeilenpause CITE - Referenzcode - Computercode (erforderlich beim Zitieren von Quellcode) DFN - Feld Definieren Sie Feld EM - Betonung der Schriftart - Schrifteinstellung (nicht empfohlen) I - ITALIC IMG - Bildeingabe - Eingangsfeld KBD - Definieren Sie die Textbezeichnung Tastatur - Tabelle Beschriftung Q - Kurzes Zitat S - Unterstuf Kleine-kleine Schriftart Textspann
IMG ist ein Inline -Ersatzelement und hat den gleichen Effekt wie ein Blockelement
Der Unterschied zwischen readonly und deaktiviert in Formularen
Häufige Punkte: Verhindern Sie, dass Benutzer den Inhalt im Formular ändern. Kann nicht geändert werden. Das auf deaktivierte Textfeld kann nicht den Fokus erhalten 3. Wenn das Feld des Formulars deaktiviert ist, wird das Feld nicht gesendet (im Formular übergeben) und serialisiert1. Geben Sie die URL in den Browser ein und zeigen Sie sie auf der Webseite an.
Die Domain-Auflösung initiiert ein TCP-Händedruck, um eine TCP-Verbindung herzustellen. fordert die Ressourcen im HTML -Code an.
2. Nachteile von Keksen
Die maximale Anzahl von Cookies, die unter den einzelnen Domain -Namen erzeugt werden, wird die maximale Kekse ausgelöst. Es überschreitet im Allgemeinen nicht 4095 Bytes.
3. Mainstream -Browser und Körner
Google Chrome: Webkit/Blink Safari: Webkit IE: Trident Firefox: Gecko Opera: Presto/Webkit/Blink
4. Der Unterschied zwischen SessionStorage und LocalStorage
SessionStorage wird verwendet, um Daten in einer Sitzung lokal zu speichern. localStorage wird für die dauerhafte lokale Speicherung verwendet, sofern die Daten nicht aktiv gelöscht werden.
5. Sprechen Sie über das Verständnis der BFC -Spezifikationen
BFC ist ein Blockformatierungskontext, dh Formatierungskontext. Die Auswirkungen von BFC haben es, Elemente innerhalb und außerhalb von BFC zu ermöglichen, miteinander zu interagieren.
6. Bitte nennen Sie mindestens drei Möglichkeiten, um die Ladezeit der Seiten zu verkürzen.
Minimieren Sie wiederholte HTTP -Anforderungen in der Seite.
7. Wie optimieren Sie die Website der Website?
Für Inhalte reduzieren Sie HTTP -Anforderungen: Verschmelzen von Dateien, CSS -Sprites und Inline -Bildern. Verwenden Sie GZIP für Komponenten. Am Ende der Seite stellen Sie JavaScript und CSS aus Strecken Bilder in HTML.8. Browserspeicher?
Wenn es vorübergehend ist, müssen wir die Daten nur im Speicher speichern, und der anhaltende Speicher ist nur zur Laufzeit verfügbar. usw. In HTTP automatisch getragen wird die Obergrenze der Größe 4K die Ablaufzeit für Sie selbst einstellen. Lokalstor- / SessionStorage: Langzeitspeicher / Fensterschließen und Löschen. Die Größenlimit beträgt 4 ~ 5MindexDB-Serververteilter Cache Redis Datenbank9. bekommen/posten?
GET: Cache, Anforderungslänge ist begrenzt, wird im Verlauf gespeichert, keine Nebenwirkungen (Ressourcen werden nicht geändert), idempotent (die Anzahl der Anfragen hat nichts mit Ressourcen zu tun) Szenario Post: Sicherheit, Big Data, mehr Codierungstypen10. Sicherheitsprobleme?
XSS-Angriff: Injizieren Sie bösartige Code Cookie Set httponly, um den Eingabeinhalten zu entkommen und Inhalte auf der Seite CSRF: Cross-Site-Anforderung Fälschung, Schutz: GET ändert nicht die Daten und wird nicht von Websites von Drittanbietern zugegriffen, auf die das Cookie des Benutzers festgelegt ist Ein Whitelist und wird nicht von der Website von Dritten auf Website -Anfrageanfrage zugegriffenLeistungsoptimierung
1. Was sind die Aspekte der Leistungsoptimierung?
Ressourcenkomprimierung und Verschmelzung, Reduzierung von HTTP-Anforderungen, asynchrones Laden von Nicht-Core-Code, Verwendung von Browser-Cache und Verwendung von CDN, um DNS vor dem Aufstieg vorzulösen2. Asynchrone Laden?
Dynamisches Skript laden DeferaSync3. Was sind die Unterschiede in den Lademethoden?
Auf Defer wird nach der Analyse des HTML ausgeführt.4. Vorspannung?
Während der Entwicklung können Sie auf eine solche Situation stoßen. Einige Ressourcen müssen nicht sofort verwendet werden, aber Sie möchten sie so schnell wie möglich erhalten. Das Vorladen ist tatsächlich ein deklarativer Abruf, der den Browser dazu zwingt, Ressourcen anzufordern und das Onload -Ereignis nicht zu blockieren. Das Vorladen kann die Ladezeit des ersten Bildschirms in gewissem Maße verkürzen, da einige wichtige Dateien, die den ersten Bildschirm nicht beeinflussen, beim Laden verzögert werden können.5. DNS vor der Auflösung?
Die DNS-Auflösung braucht auch Zeit, und die IP, die dem Domänennamen entspricht, kann im Voraus durch Vorauflösung erhalten werden. <meta http-äquiv = 'x-dns-prefetch-control' content = 'on'> <link rel = "dns-prefetch" href = "// yuchengkai.cn"> Das A-Tag wird nicht standardmäßig aktiviert. Das HTTPS-Protokoll ist vor Parziertheit, so dass Meta manuell eingestellt werden muss6. Faule Ausführung? Diese Technologie kann für eine zeitaufwändige Logik für die Erstbild-Optimierung verwendet werden, die auf dem ersten Bildschirm nicht verwendet werden muss, kann eine faule Ausführung verwendet werden. Eine faule Ausführung erfordert das Aufwachen, was im Allgemeinen durch einen Timer oder Ereignis erfolgen kann.
7. Lazy Loading?
Das Prinzip der faulen Belastung besteht darin, nur das zu laden, was in einem benutzerdefinierten Bereich geladen werden muss (normalerweise im sichtbaren Bereich, aber es kann auch der Bereich sein, der in den sichtbaren Bereich eindringt). Für Bilder stellen Sie zuerst das SRC -Attribut des Bild -Tags auf ein Platzhalterbild ein, geben Sie die reale Bildressource in ein benutzerdefiniertes Attribut ein und ersetzen Sie beim Eingeben des benutzerdefinierten Bereichs das benutzerdefinierte Attribut durch das SRC -Attribut, sodass das Bild die Ressource herunterlädt , das faule Laden des Bildes realisiert.
Lazy Loading kann nicht nur für Bilder, sondern auch für andere Ressourcen verwendet werden. Zum Beispiel beginnt das Video erst nach dem Eintritt in den sichtbaren Bereich usw. zu spielen.
Reagieren Sie Interviewfragen
1. Wann man State Manager benutzt?
Wenn Sie das Projekt als Ganzes betrachten, sind die Benutzer mit unterschiedlichen Identitäten unterschiedlich (wie gewöhnliche Benutzer und Administratoren). Aus mehreren Quellen. Komponenten.2. Was sind die Eigenschaften von React?
Es verwendet ** virtuelles Dom ** anstelle von realem DOM. Es kann über die Serverseite gerendert werden. Es folgt Einwegdatenfluss oder Datenbindung3.. Listen Sie einige der Hauptvorteile von React auf?
Es verbessert die Leistung der Anwendung und kann sowohl auf dem Client als auch auf der Server leicht verwendet werden. Reagieren.4. Was ist JSX?
JSX ist kurz für JavaScript XML. ist eine von React verwendete Datei, die die ausdrucksstarke Leistung und die HTML-ähnliche Vorlagensyntax von JavaScript nutzt. Dies macht HTML -Dateien sehr einfach zu verstehen.此文件能使应用非常可靠,并能够提高其性能例子render() {return(<div><h1> Hello World </h1></div>)}5、说说为什么浏览器无法读取JSX?
浏览器只能处理JavaScript 对象,而不能读取常规JavaScript 对象中的JSX。所以为了使浏览器能够读取JSX,首先,需要用像Babel 这样的JSX 转换器将JSX 文件转换为JavaScript 对象,然后再将其传给浏览器6、你理解“在React 中,一切都是组件”这句话?
组件是React 应用UI 的构建块。这些组件将整个UI 分成小的独立并可重用的部分。每个组件彼此独立,而不会影响UI 的其余部分7、 React 中render()的目的?
每个React 组件强制要求必须有一个render()。它返回一个React 元素,是原生DOM 组件的表示。如果需要渲染多个HTML 元素,则必须将它们组合在一个封闭标记内,例如<form>、<group>、<div> 等。此函数必须保持纯净,即必须每次调用时都返回相同的结果8、什么是Props?
Props 是React 中属性的简写。它们是只读组件,必须保持纯,即不可变。它们总是在整个应用中从父组件传递到子组件。子组件永远不能将prop 送回父组件。这有助于维护单向数据流,通常用于呈现动态生成的数据9、React 中的状态是什么?
状态是React 组件的核心,是数据的来源,必须尽可能简单。基本上状态是确定组件呈现和行为的对象。与Props 不同,它们是可变的,并创建动态和交互式组件。可以通过this.state() 访问它们。10、区分状态和Props?
条件StateProps从父组件中接受初始值YesYes父组件可以改变值NoYes在组件中设置默认值NoYes在组件的内部变化YesNo设置子组件的初始值YesYes在子组件的内部改变NoYes11、如何更新组件的状态?
使用this.setState()更新组件的状态12、React 组件生命周期的阶段是什么?
React 组件的生命周期有三个不同的阶段:初始渲染阶段:这是组件即将开始其生命之旅并进入DOM 的阶段。更新阶段:一旦组件被添加到DOM,它只有在prop 或状态发生变化时才可能更新和重新渲染。这些只发生在这个阶段卸载阶段:这是组件生命周期的最后阶段,组件被销毁并从DOM 中删除13、你对React 的refs 有什么了解?
Refs 是React 中引用的简写。它是一个有助于存储对特定的React 元素或组件的引用的属性,它将由组件渲染配置函数返回。用于对render()返回的特定元素或组件的引用。当需要进行DOM 测量或向组件添加方法时,它们会派上用场列出一些应该使用refs 的情况?需要管理焦点、选择文本或媒体播放时触发式动画与第三方DOM 库集成14、如何模块化React 中的代码?
可以使用export 和import 属性来模块化代码。它们有助于在不同的文件中单独编写组件15、什么是高阶组件HOC?
高阶组件是重用组件逻辑的高级方法,是一种源于React 的组件模式。 HOC 是自定义组件,在它之内包含另一个组件。它们可以接受子组件提供的任何动态,但不会修改或复制其输入组件中的任何行为。你可以认为HOC 是“纯(Pure)”组件16、你能用HOC 做什么?
HOC 可用于许多任务:用代码重用,逻辑和引导抽象渲染劫持状态抽象和控制Props 控制17、 React 中key 的重要性是什么?
key 用于识别唯一的Virtual DOM 元素及其驱动UI 的相应数据。它们通过回收DOM 中当前所有的元素来帮助React 优化渲染。这些key 必须是唯一的数字或字符串,React 只是重新排序元素而不是重新渲染它们。这可以提高应用程序的性能18、MVC 框架的主要问题是什么?
key 用对DOM 操作的代价非常高程序运行缓慢且效率低下内存浪费严重由于循环依赖性,组件模型需要围绕models 和views 进行创建19、请你解释一下Flux?
Flux 是一种强制单向数据流的架构模式。它控制派生数据,并使用具有所有数据权限的中心store 实现多个组件之间的通信。整个应用中的数据更新必须只能在此处进行。 Flux 为应用提供稳定性并减少运行时的错误。20、你对“单一事实来源”有什么理解
Redux 使用“store” 将程序的整个状态存储在同一个地方。因此所有组件的状态都存储在store 中,并且它们从store 本身接收更新。单一状态树可以更容易地跟踪随时间的变化,并调试或检查程序。21、列出Redux 的组件?
Redux 由以下组件组成:Action 这是一个用来描述发生了什么事情的对象Reducer 这是一个确定状态将如何变化的地方Store 整个程序的状态/对象树保存在Store 中View 查只显示Store 提供的数据22、 Store 在Redux 中的意义是什么?
store 是一个JavaScript 对象,它可以保存程序的状态,并提供一些方法来访问状态、调度操作和注册侦听器。应用程序的整个状态/对象树保存在单一存储中。因此,Redux 非常简单且是可预测的。我们可以将中间件传递到store 来处理数据,并记录改变存储状态的各种操作。所有操作都通过Reducer 返回一个新状态23、 Redux 有哪些优点?
结果的可预测性可维护性服务器端渲染易于测试-24、 什么是React 路由?
React 路由是一个构建在React 之上的强大的路由库,它有助于向应用程序添加新的屏幕和流。这使URL 与网页上显示的数据保持同步。它负责维护标准化的结构和行为,并用于开发单页Web 应用。 React 路由有一个简单的API。25、说说你对React 的渲染原理的理解?
单向数据流。React 是一个MVVM 框架,简单来说是在MVC 的模式下在前端部分拆分出数据层和视图层。单向数据流指的是只能由数据层的变化去影响视图层的变化,而不能反过来(除非双向绑定)数据驱动视图。我们无需关注页面的DOM,只需要关注数据即可渲染过程,生命周期……setState()大部分时候是异步执行的,提升性能。26、React 中三种构建组件的方式?
React.createClass()、ES6 class 和无状态函数。JQuery
说出jQuery中常见的几种函数以及他们的含义是什么? (1)get()取得所有匹配的DOM元素集合; (2)get(index)取得其中一个匹配的元素.index表示取得第几个匹配的元素; (3)append(content)向每个匹配的元素内部追加内容; (4)after(content)在每个匹配的元素之后插入内容; (5)html()/html(var)取得或设置匹配元素的html内容; (6)find(expr)搜索所有与指定表达式匹配的元素; (7)bind(type,[data],fn)为每个匹配元素的特定事件绑定事件处理函数; (8)empty()删除匹配的元素集合中所有的子节点; (9)hover(over,out)一个模仿悬停事件(鼠标移动到一个对象上面及移出这个对象)的方法; (10)attr(name)取得第一个匹配元素的属性值。
jQuery 能做什么? Get the elements of the page; modify the appearance of the page; change the large content of the page; respond to the user's page operations; add dynamic effects to the page; get information from the server without refreshing the page; simplify common javascript tasks .
如何将一个HTML元素添加到DOM树中的? 可以通过appendTo()方法在指定的DOM元素末尾添加一个现存的元素或者一个新的HTML元素。
什么是jQuery? jQuer能做什么? jQuery是一套JavaScript的库,它简化了使用Javascript进行网页特效开发的一些复杂性,提供了对常见任务的自动化和复杂任务的简化
jQuery的作用快速获取文档元素提供漂亮的页面动态效果创建Ajax无刷新网页提供对JavaScript语言的增强增强的事件处理更改网页内容JQuery可以修改网页中的内容,比如更改网页的文本、插入或转网页图像, jQuery简化了原本使用JavaScript代码需要处理的方式。JQuery 的优点1.利用css的选择器提供高速的元素查找行为。 2.提供了一个抽象层来标准化各种常见的任务,可以解决各种浏览器的兼容问题。 3.将复杂的代码简化,提供连缀编程模式,大大简化了代码的操作。
以上就是分享一些值得收藏的精选Web前端面试题(附答案)的详细内容,更多请关注本站其它相关文章!