In der IT-Welt wird eine große Anzahl von Javascript-Entwicklern benötigt. Wenn die Stelle Ihre Fähigkeiten am besten zur Geltung bringt, gibt es viele Möglichkeiten, das Unternehmen zu wechseln und Ihr Gehalt zu erhöhen. Doch bevor Sie in ein Unternehmen aufgenommen werden können, müssen Sie Ihre Fähigkeiten unter Beweis stellen, um das Vorstellungsgespräch zu bestehen. In diesem Artikel zeige ich Ihnen fünf typische Fragen.
Denken Sie an den folgenden Code:
(function() { var a = b = 5; })(); console.log(b);
Was wird auf der Konsole gedruckt?
Der obige Code druckt 5 aus.
Die Falle dieses Problems besteht darin, dass es im sofort ausgeführten Funktionsausdruck (IIFE) zwei Namen gibt, die Variable jedoch über das Schlüsselwort var deklariert wird. Das bedeutet, dass a eine lokale Variable dieser Funktion ist. Im Gegensatz dazu ist b eine globale Variable, die zu dieser Funktion gehört.
Eine weitere Gefahr dieses Problems besteht darin, dass er in der Funktion keinen "strengen Modus" ( 'use strict'; ) verwendet hat. Wenn der strikte Modus aktiviert ist, meldet der Code einen Uncaught ReferenceError: b ist nicht definiert. Beachten Sie die strengen Modusanforderungen. Sie müssen explizit auf globale Variablen verweisen, wenn dies das erwartete Verhalten ist. Daher müssen Sie wie folgt schreiben:
(function() { 'use strict'; var a = window.b = 5; })(); console.log(b);
Definieren Sie eine Wiederholungsfunktion für das String-Objekt. Diese Funktion akzeptiert einen ganzzahligen Parameter, um anzugeben, wie oft die Zeichenfolge wiederholt werden muss. Diese Funktion erfordert, dass eine Zeichenfolge eine bestimmte Anzahl von Malen wiederholt wird. Zum Beispiel:
`console.log('hello'.repeatify(3));``
sollte hellohellohello ausgeben.
Eine mögliche Implementierung sieht so aus:
String.prototype.repeatify = String.prototype.repeatify || function(times) { var str = ''; for (var i = 0; i < times; i++) { str += this; } return str; };
Dies Die Frage testet die Verständnis des Entwicklers für die Vererbung in JavaScript und das Prototypattribut. Dadurch wird auch bestätigt, dass Entwickler die Möglichkeit haben, native Datentypfunktionen zu erweitern (obwohl sie dies nicht tun sollten).
Ein weiterer wichtiger Punkt hier ist, zu zeigen, dass Sie wissen, wie es geht, ohne möglicherweise bereits definierte Funktionen zu überschreiben. Dazu muss vor dem Anpassen der Funktion festgestellt werden, dass die Funktion nicht vorhanden ist.
`String.prototype.repeatify = String.prototype.repeatify || function(times) {/* code here */};``
Dieser Trick ist nützlich, wenn Sie aufgefordert werden, eine JavaScript-Funktion anzupassen.
Was wird das Ergebnis der Ausführung des folgenden Codes sein? Warum passiert das?
function test() { console.log(a); console.log(foo()); var a = 1; function foo() { return 2; } } test();
Die Ausführungsergebnisse dieses Codes sind undefiniert und 2 .
Der Grund für dieses Ergebnis ist, dass sowohl Variablen als auch Funktionen angehoben werden. Daher existierte es zu dem Zeitpunkt, als a gedruckt wurde, in der Funktion (das heißt, es wurde deklariert), war aber noch undefiniert. Mit anderen Worten, der Code oben und der Code unten sind identisch.
function test() { var a; function foo() { return 2; } console.log(a); console.log(foo()); a = 1; } test();
Was ist das Ergebnis des folgenden Codes? Bitte erläutern Sie Ihre Antwort.
var fullname = 'John Doe'; var obj = { fullname: 'Colin Ihrig', prop: { fullname: 'Aurelio De Rosa', getFullname: function() { return this.fullname; } } }; console.log(obj.prop.getFullname()); var test = obj.prop.getFullname; console.log(test());
Der Code gibt Aurelio De Rosa und John Doe aus. Der Grund dafür ist, dass in JavaScript der Kontext einer Funktion, auf die durch das Schlüsselwort this verwiesen wird, davon abhängt, wie die Funktion aufgerufen wird, und nicht davon, wie sie definiert ist.
Im ersten console.log()-Aufruf wird getFullname() als Funktion von obj.prop aufgerufen. Daher verweist der Kontext hier auf Letzteres und die Funktion gibt die Eigenschaft „fullname“ des Objekts zurück. Wenn dagegen getFullname() als Variable von test angegeben wird, zeigt dieser Kontext auf das globale Objekt (Fenster). Weil test gleichbedeutend damit ist, als Eigenschaft des globalen Objekts festgelegt zu werden. Aus diesem Grund gibt die Funktion eine Eigenschaft „fullname“ von „window“ zurück, die in diesem Fall in der ersten Zeile des Codeausschnitts festgelegt ist.
Beheben Sie das vorherige Problem und lassen Sie das letzte console.log() Aurelio De Rosa ausdrucken.
Diese Frage kann den Funktionskontext durch die Funktion call() oder apply() erzwingen. Wenn Sie den Unterschied zwischen call() und apply() nicht kennen, empfehle ich die Lektüre des Artikels Was sind die Unterschiede zwischen function.call und function.apply? Im folgenden Code werde ich call() verwenden, aber in diesem Fall kann apply() auch das gleiche Ergebnis erzielen:
`console.log(test.call(obj.prop));``
In diesem Artikel haben wir fünf typische besprochen Fragen, die in Vorstellungsgesprächen gestellt werden, um JavaScript-Entwickler zu testen. Die eigentlichen Fragen aus den Interviews können variieren, die behandelten Konzepte und Themen sind jedoch in der Regel sehr ähnlich. Ich wünsche Ihnen viel Spaß beim Testen Ihrer Fähigkeiten. Falls Sie nicht alle Antworten kennen, machen Sie sich keine Sorgen: Es gibt nichts, was Sie nicht ohne Wissen und Erfahrung lösen können.
Wenn Ihnen während des Vorstellungsgesprächs weitere interessante Fragen gestellt wurden, zögern Sie nicht, diese mit uns zu teilen. Dies wird vielen Entwicklern helfen.
Das obige ist der detaillierte Inhalt vonFünf typische JavaScript-Interviewfragen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!