Nachdem ich die Verteidigung meines Masterstudiums abgeschlossen hatte, begann ich weiter hart an einer beruflichen Veränderung zu arbeiten. Xiaobai wird kämpfen, komm schon. Dieser Artikel ist ein Zitat aus der JS-Kernserie: Eine kurze Diskussion des Funktionsumfangs.
In einer Funktion zeigt dies immer auf das Besitzerobjekt der aktuellen Funktion. Der spezifische Punkt davon kann nur zur Laufzeit bestimmt werden und sein aufrufendes Objekt kann nur bekannt sein.
window.name = "window"; function f(){ console.log(this.name); } f();//输出window var obj = {name:'obj'}; f.call(obj); //输出obj
Wenn f() ausgeführt wird, ist der Aufrufer von f() das Fensterobjekt, daher wird „window“ ausgegeben.
f.call(obj) dient dazu, f() für das obj-Objekt auszuführen, was obj.f() entspricht. Zu diesem Zeitpunkt ist dies in f obj, daher ist die Ausgabe „obj“. .
code1:
var foo = "window"; var obj = { foo : "obj", getFoo : function(){ return function(){ return this.foo; }; } }; var f = obj.getFoo(); console.log(1+":"+f()); //输出window
code2:
var foo = "window"; var obj = { foo : "obj", getFoo : function(){ var that = this; return function(){ return that.foo; }; } }; var f = obj.getFoo(); console.log(f()); //输出obj
code1:
Das Ausführen von var f = obj.getFoo() gibt eine anonyme Funktion zurück, ganz in:
var f = function(){
return this.foo;
}
f() ist äquivalent zu window.f(), also zeigt this in f auf das Fensterobjekt, this .foo ist äquivalent zu window.foo, also gibt f() „window“ zurück
code2:
Das Ausführen von var f = obj.getFoo() gibt auch eine anonyme Funktion zurück, das heißt:
var f = function (){
return that.foo;
}
Der einzige Unterschied besteht darin, dass this in f that wird. Bevor Sie wissen, welches Objekt das ist, bestimmen Sie zunächst die Gültigkeitsbereichskette von f: f-> ;getFoo ->window und suchen Sie danach in der Kette. Zu diesem Zeitpunkt können Sie feststellen, dass dies in getFoo darauf verweist, und dass dies in getFoo auf den Aufrufer seiner Laufzeit verweist. Dies ist aus var f = obj.getFoo ersichtlich () Zu diesem Zeitpunkt zeigt dies auf das obj-Objekt, sodass.foo äquivalent zu obj.foo ist, sodass f() „obj“ zurückgibt.
Studenten, die sich über die Scope-Kette nicht im Klaren sind, können sich auf JavaScript von Scope bis Abschluss beziehen.
Das obige ist der detaillierte Inhalt vonVerstehen Sie das Schlüsselwort this in JS genau. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!