Heim > Web-Frontend > js-Tutorial > 5 klassische JavaScript-Interviewfragen_Javascript-Kenntnisse

5 klassische JavaScript-Interviewfragen_Javascript-Kenntnisse

WBOY
Freigeben: 2016-05-16 16:34:14
Original
1422 Leute haben es durchsucht

1: Geltungsbereich

Code kopieren Der Code lautet wie folgt:

(function() {
var a = b = 5;
})();
console.log(b);

Was wird auf der Konsole gedruckt?

Antwort

Der obige Code gibt 5 aus.

Der Trick bei diesem Problem besteht darin, dass es zwei Variablendeklarationen gibt, eine jedoch mit dem Schlüsselwort var deklariert wird. Zeigt an, dass es sich um eine lokale Variable einer Funktion handelt. Im Gegensatz dazu wird b zu einer globalen Variablen.

Ein weiterer Trick bei dieser Frage besteht darin, dass sie keinen strikten Modus verwendet („use strict“;). Wenn der strikte Modus aktiviert ist, löst der Code einen ReferenceError aus: b ist nicht definiert. Denken Sie daran, dass der strikte Modus eine explizite Angabe erfordert, um globale Variablendeklarationen zu implementieren. Sie sollten zum Beispiel schreiben:

Code kopieren Der Code lautet wie folgt:

(function() {
'strikt verwenden';
var a = window.b = 5;
})();

console.log(b);

2: Erstellen Sie eine „native“ Methode

Definieren Sie eine Wiederholungsfunktion für das String-Objekt. Wenn eine Ganzzahl n übergeben wird, wird das Ergebnis der n-fachen Wiederholung der Zeichenfolge zurückgegeben. Zum Beispiel:

Code kopieren Der Code lautet wie folgt:

console.log('hello'.repeatify(3));

sollte „hellohellohello“ ausgeben.

Antwort

Eine mögliche Implementierung sieht so aus:

Code kopieren Der Code lautet wie folgt:

String.prototype.repeatify = String.prototype.repeatify || function(times) {
var str = '';
für (var i = 0; i < mal; i ) {
       str = this;
}
Rückgabe str;
};

Die aktuellen Fragen testen das Wissen der Entwickler über JavaScript-Vererbung und -Prototypen. Dadurch wird auch überprüft, ob der Entwickler weiß, wie integrierte Objekte erweitert werden (auch wenn dies nicht getan werden sollte).

Ein weiterer wichtiger Punkt hierbei ist, dass Sie wissen müssen, wie Sie möglicherweise bereits definierte Funktionen nicht überschreiben können. Testen Sie, dass die Funktionsdefinition vorher nicht existierte:

Code kopieren Der Code lautet wie folgt:

String.prototype.repeatify = String.prototype.repeatify ||. function(times) {/* Code hier */};

Diese Technik ist besonders nützlich, wenn Sie aufgefordert werden, JavaScript-Funktionen kompatibel zu machen.

3: Statement-Heben

Führen Sie diesen Code aus und welche Ergebnisse werden ausgegeben.

Code kopieren Der Code lautet wie folgt:

Funktionstest() {
console.log(a);
console.log(foo());
var a = 1;
Funktion foo() {
Rückgabe 2;
}
}

10: test();

Antwort

Das Ergebnis dieses Codes ist undefiniert und 2.

Der Grund dafür ist, dass die Deklarationen von Variablen und Funktionen nach vorne (an den Anfang der Funktion verschoben) werden, den Variablen jedoch keine Werte zugewiesen werden. Wenn die Variable gedruckt wird, existiert sie zwar in der Funktion (sie wurde deklariert), ist aber noch undefiniert. Mit anderen Worten, der obige Code entspricht dem Folgenden:

Code kopieren Der Code lautet wie folgt:

Funktionstest() {
var a;
Funktion foo() {
Rückgabe 2;
}

console.log(a);
console.log(foo());

a = 1;
}

test();

4: So funktioniert das in JavaScript

Was wird der folgende Code ausgeben? Geben Sie Ihre Antwort.

Code kopieren Der Code lautet wie folgt:

var fullname = 'John Doe';
var obj = {
Vollständiger Name: 'Colin Ihrig',
; Stütze: {
        vollständiger Name: 'Aurelio De Rosa',
        getFullname: function() {
            return this.fullname;
}
}
};

console.log(obj.prop.getFullname());

var test = obj.prop.getFullname;

console.log(test());

Antwort

Die Antwort ist Aurelio De Rosa und John Doe. Der Grund dafür ist, dass das Verhalten einer Funktion davon abhängt, wie die JavaScript-Funktion aufgerufen und definiert wird, und nicht nur davon, wie sie definiert ist.

Im ersten console.log()-Aufruf wird getFullname() als Funktion des obj.prop-Objekts aufgerufen. Daher bezieht sich der Kontext auf Letzteres und die Funktion gibt den vollständigen Namen des Objekts zurück. Wenn dagegen getFullname() der Testvariablen zugewiesen wird, bezieht sich der Kontext auf das globale Objekt (Fenster). Dies liegt daran, dass test implizit als Eigenschaft des globalen Objekts festgelegt wird. Aus diesem Grund gibt die Funktion den vollständigen Namen des Fensters zurück, also den in der ersten Zeile definierten Wert.

5: call() und apply()

Jetzt lösen wir das vorherige Problem, sodass die letzte console.log() Aurelio De Rosa ausgibt.

Antwort

Dieses Problem kann geändert werden, indem die Verwendung von call() oder apply() zum Ändern des Funktionskontexts erzwungen wird. Im Folgenden verwende ich call(), aber in diesem Fall gibt apply() das gleiche Ergebnis aus:

Code kopieren Der Code lautet wie folgt:

console.log(test.call(obj.prop));
Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage