1: Geltungsbereich
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:
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:
Antwort
Eine mögliche Implementierung sieht so aus:
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:
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.
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:
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.
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: