Ich habe das vor ein paar Tagen während des Interviews verwendet. Der Interviewer sagte, dass mein Verständnis ein bisschen voreingenommen war. Ich ging zurück, um das Buch und einige Blogs zu lesen und habe einige Tests durchgeführt. Ich stellte fest, dass mein Verständnis in der Tat falsch war.
1. Globale Variablen
Es sollte die am häufigsten verwendete sein. Nennen Sie dies in der Funktion, und dies ist eigentlich eine globale Variable
var value = "0"; Funktion mei () {var value = "1"; console.log (this.value); // 0 console.log (Wert); // 1} mei ();Die Ausgabe ist 0, weil dies auf die globale zeigt
2. Konstruktor
Dies ist die Verwendung, mit der ich eher vertraut bin. Verwenden Sie dies im Konstruktor. Nach einem neuen Objekt zeigt dies auf dieses neue Objekt.
var value = "Fenster"; Funktion mei () {this.Value = 1; this.show = function () {console.log (this.Value)}} var m = new mei (); console.log (m.Value); // 1 m.show (); // 1Sie können sehen, dass die Ausgabe 1 anstelle eines Fensters ist. Es ist ersichtlich, dass dies aufgrund des Konstruktors hier auf ein neues Objekt anstelle einer globalen Variablen hingewiesen hat.
3.Call und bewerben Sie sich
Leihen Sie die Beispiele aus meinem Anruf aus und wenden Sie den Blog direkt an
var p = "456"; Funktion f1 () {this.p = "123"; } Funktion f2 () {console.log (this.p); } f2 (); // 456 f2.call (f1 ()); // 123 f2.apply (f1 ()); // 123Die Ausgabe der ersten Zeile ist leicht zu verstehen. Dies weist auf die Globale hin. Der 123 liegt daran, dass nach der Verwendung von Anruf oder Bewerbung in F2 auf F1 und P in F1 123 verweist. Bitte klicken Sie auf den Blog -Beitrag für Details.
4. Die Funktion wird als Methode eines Objekts bezeichnet (bei dem ich einen Fehler gemacht habe)
Zu dieser Zeit bat ich mich, ein Objekt mit mehreren Methoden zu schreiben. Ich habe eine globale Variable in meinem Kopf definiert und diese dann in der Methode des Objekts genannt. Der Interviewer fragte mich, was das sei? Ich sagte, es sollte ein Fenster sein, weil ich diese Methode sehr wenig verwendet habe und dachte, dass nur neuer oder Anrufe die Richtung davon ändern würde, also sagte er, es sei falsch und bat mich, zurück zu gehen und sie selbst zu sehen. Jetzt habe ich es versucht, ich bin wirklich falsch. Veröffentlichen Sie den Code
var value = "Vater"; Funktion mei () {} mei.value = "Child"; mei.get = function () {console.log (this.value)}; mei.show = function () {console.log (value)}; mei.get (); // Child mei.show (); //VaterDa Get als Methode von Mei aufgerufen wird
Der Vater verstehe ich so. Die Funktion, auf die durch Show hingewiesen wird, ist in der globalen Umgebung definiert. Aufgrund der Scope -Kette findet sich in der Show kein Wert, daher definiere ich seine Umgebung und finde sie. Dies findet den globalen Wert. Wenn hier ein Fehler im Verständnis ist, hoffe ich, dass ein Freund darauf hinweisen kann!