Junior
Was wird in der Konsole angezeigt, wenn Sie this in console.log verwenden?
sobes.tech KI
Antwort von AI
Es hängt vom Kontext des Aufrufs von console.log und vom strikten Modus von JavaScript ("use strict") ab.
Im globalen Kontext (außerhalb von Funktionen und Modulen):
- Im Nicht-Strikt-Modus (
"use strict"fehlt oder in einer Funktion deklariert):thisverweist auf das globale Objekt (windowim Browser,globalin Node.js). - Im Strikt-Modus:
thisistundefined.
Innerhalb einer Funktion:
- Im Nicht-Strikt-Modus:
thisverweist auf das globale Objekt, wenn die Funktion als normale Funktion aufgerufen wird (myFunction()). Wenn die Funktion als Methode eines Objekts aufgerufen wird (myObject.myMethod()), verweistthisauf das Objekt (myObject). Wird die Funktion als Konstruktor verwendet (new MyClass()), verweistthisauf die neue Instanz. - Im Strikt-Modus:
thisistundefined, wenn die Funktion als normale Funktion aufgerufen wird. In anderen Fällen (Methoden, Konstruktoren) ist das Verhalten identisch mit dem Nicht-Strikt-Modus.
Innerhalb einer Pfeilfunktion (=>):
thiswird lexikalisch vom umgebenden Kontext geerbt. Das bedeutet, dass der Wert vonthisinnerhalb einer Pfeilfunktion derselbe ist wie in der äußeren normalen Funktion oder im globalen Kontext, in dem die Pfeilfunktion deklariert wurde, unabhängig davon, wie sie aufgerufen wird. Pfeilfunktionen bindenthisnicht an ihren eigenen Aufrufkontext.
Beispiel:
// Globaler Kontext
console.log(this); // Im Browser: Window, in Node.js: global (Nicht-Strikt-Modus)
// Im Browser: undefined, in Node.js: undefined (Strikt-Modus)
// Normale Funktion
function showThisNonStrict() {
console.log(this);
}
showThisNonStrict(); // Im Browser: Window, in Node.js: global
function showThisStrict() {
"use strict";
console.log(this);
}
showThisStrict(); // undefined
const myObject = {
methodNonStrict: function() {
console.log(this);
},
methodStrict: function() {
"use strict";
console.log(this);
}
};
myObject.methodNonStrict(); // myObject
myObject.methodStrict(); // myObject
// Pfeilfunktion
const arrowFunc = () => {
console.log(this);
};
arrowFunc(); // Im Browser: Window, in Node.js: global (erbt vom globalen Kontext)
const myObjectWithArrow = {
arrowMethod: () => {
console.log(this);
}
};
myObjectWithArrow.arrowMethod(); // Im Browser: Window, in Node.js: global (erbt vom Deklarationskontext)