1: Zielfernrohr
Die Codekopie lautet wie folgt:
(function () {
var a = b = 5;
}) ();
console.log (b);
Was wird auf der Konsole gedruckt?
Antwort
Der obige Code druckt 5.
Der Trick für dieses Problem ist, dass es hier zwei variable Erklärungen gibt, aber ein mit dem Schlüsselwort var deklarierter Deklaration. Stellt dar, dass es sich um eine lokale Variable einer Funktion handelt. Im Gegensatz dazu wird B zu einer globalen Variablen.
Ein weiterer Trick für dieses Problem ist, dass es keinen strengen Modus verwendet ("Strikte";). Wenn der strenge Modus aktiviert ist, erhöht der Code einen ReferenzErrorfehler: B ist nicht definiert. Denken Sie daran, dass Sie diesen strengen Modus explizit angeben müssen, um globale Variablenerklärungen zu implementieren. Zum Beispiel sollten Sie schreiben:
Die Codekopie lautet wie folgt:
(function () {
"Strikte";
var a = Fenster.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, gibt es das Ergebnis der anholten N -mal wiederholten Zeichenfolge zurück. Zum Beispiel:
Die Codekopie lautet wie folgt:
console.log ('hello'.repeatify (3));
Hallohellohello sollte gedruckt werden.
Antwort
Eine mögliche Implementierung ist wie folgt:
Die Codekopie lautet wie folgt:
String.prototype.repeatify = string.prototype.repeatify || Funktion (Zeiten) {
var str = '';
für (var i = 0; i <times; i ++) {
str += this;
}
return str;
};
Der aktuelle Problem testet die Wissenswissen von Entwicklern über die JavaScript -Vererbung und den Prototyp. Dies prüft auch, ob der Entwickler weiß, ob das eingebaute Objekt erweitert ist (obwohl dies nicht geschehen sollte).
Ein weiterer Punkt hierfür ist, dass Sie wissen müssen, wie Sie die möglicherweise definierten Funktionen nicht überschreiben können. Testen Sie, dass die Funktionsdefinition vorher nicht vorhanden ist:
Die Codekopie lautet wie folgt:
String.prototype.repeatify = string.prototype.repeatify || Funktion (Zeiten) {/ * Code hier */};
Diese Technik ist besonders nützlich, wenn Sie aufgefordert werden, mit JavaScript -Funktionen kompatibel zu sein.
3: Erklären Sie die Beförderung (Heben)
Führen Sie diesen Code aus und geben Sie das Ergebnis aus.
Die Codekopie lautet wie folgt:
Funktionstest () {
console.log (a);
console.log (foo ());
var a = 1;
Funktion foo () {
Rückkehr 2;
}
}
10: test ();
Antwort
Das Ergebnis dieses Code ist undefiniert und 2.
Der Grund dafür ist, dass sowohl die Variable als auch die Funktionserklärung fortgeschritten sind (auf die Oberseite der Funktion verschoben), aber die Variable weist keinen Wert zu. Wenn Sie also die Variable drucken, existiert sie in der Funktion (sie wird deklariert), ist aber immer noch undefiniert. Mit anderen Worten, der obige Code entspricht Folgendes:
Die Codekopie lautet wie folgt:
Funktionstest () {
var a;
Funktion foo () {
Rückkehr 2;
}
console.log (a);
console.log (foo ());
a = 1;
}
prüfen();
4: Wie das in JavaScript funktioniert
Welche Ergebnisse ausgegeben wird der folgende Code? Geben Sie Ihre Antwort.
Die Codekopie lautet wie folgt:
var fullname = 'John Doe';
var obj = {
Vollname: 'Colin Ihrig',
Prop: {
Fullname: 'Aurelio de Rosa',
GetFullName: function () {
kehre diesen. fullname;
}
}
};
console.log (obj.prop.getfulname ());
var test = obj.prop.getfulName;
console.log (test ());
Antwort
Die Antworten sind Aurelio de Rosa und John Doe. Der Grund dafür ist, dass in einer Funktion das Verhalten davon davon abhängt, wie die JavaScript -Funktion aufgerufen und definiert wird, nicht nur, wie sie definiert ist.
In der ersten Konsole.Log () Call wird getfullname () als Funktion des Obj.Prop -Objekts bezeichnet. Der Kontext bezieht sich also auf letztere, und die Funktion gibt den Vollnamen des Objekts zurück. Im Gegensatz dazu bezieht sich der Kontext auf das globale Objekt (Fenster). Dies liegt daran, dass ein Test ein Attribut ist, das implizit als globales Objekt festgelegt wird. Aus diesem Grund gibt die Funktion den Vollnamen des Fensters zurück, dh den in der ersten Zeile definierten Wert.
5: call () und bewerben ()
Lassen Sie nun das vorherige Problem lösen und die letzte Konsole (log () drucken aurelio de Rosa.
Antwort
Das Problem kann den Funktionskontext ändern, indem Call () oder anwenden () gezwungen wird. Im Folgenden werde ich call () verwenden, aber in diesem Fall wird anwenden () das gleiche Ergebnis ausgeben:
Die Codekopie lautet wie folgt:
console.log (test.call (obj.prop));