Middle
Erzählen Sie vom Kontext von Funktionen in JavaScript.
sobes.tech KI
Antwort von AI
Der Ausführungs-Kontext einer Funktion (this) in JavaScript bestimmt, wie die Funktion aufgerufen wird und welche Werte innerhalb der Funktion zugänglich sind. Der Kontext ändert sich dynamisch je nach Aufrufart:
- Globaler Kontext: Außerhalb von Funktionen bezieht sich
thisauf das globale Objekt (windowim Browser,globalin Node.js).// Im Browser console.log(this === window); // true // In Node.js console.log(this === global); // true - Funktionskontext:
- Standardaufruf: Im nicht-strengen Modus verweist
thisinnerhalb einer Funktion auf das globale Objekt (sofern die Funktion kein Methodenteil eines Objekts ist). Im strengen Modus ("use strict";) istthisundefined.function showThis() { console.log(this); } showThis(); // Im nicht-strengen Modus: Globales Objekt; Im strengen Modus: undefined - Aufruf als Method eines Objekts:
thisverweist auf das Objekt, zu dem die Methode gehört.const user = { name: 'Alice', greet: function() { console.log("Hallo, mein Name ist " + this.name); } }; user.greet(); // Hallo, mein Name ist Alice - Mit
new(Konstruktor): Erstellt ein neues Objekt, das zum Wert vonthisinnerhalb der Konstruktorfunktion wird, und gibt dieses Objekt zurück.function Person(name) { this.name = name; } const person1 = new Person('Bob'); console.log(person1.name); // Bob - Explizite Angabe des Kontexts (
call,apply,bind):call(thisArg, arg1, arg2, ...): Ruft die Funktion mit dem angegebenenthisund den einzelnen Argumenten auf.apply(thisArg, [argsArray]): Ruft die Funktion mit dem angegebenenthisund den Argumenten in einem Array auf.bind(thisArg, arg1, arg2, ...): Gibt eine neue Funktion zurück, bei derthisdauerhaft anthisArggebunden ist und die an die Argumente gebunden sind.
function introduce(greeting, punctuation) { console.log(greeting + ", ich bin " + this.name + punctuation); } const person = { name: 'Charlie' }; introduce.call(person, "Hallo", "!"); // Hallo, ich bin Charlie! introduce.apply(person, ["Hallo", "."]); // Hallo, ich bin Charlie. const boundIntroduce = introduce.bind(person, "Hey"); boundIntroduce("?"); // Hey, ich bin Charlie?
- Standardaufruf: Im nicht-strengen Modus verweist
- Arrow-Funktionen: Haben keinen eigenen
this-Kontext. Sie erfassenthisaus dem umgebenden lexikalischen Geltungsbereich, in dem sie definiert wurden.const obj = { name: 'David', sayLater: function() { // `this` hier bezieht sich auf `obj` setTimeout(() => { // `this` hier bezieht sich ebenfalls auf `obj` (geerbt aus `sayLater`) console.log("Später, ich bin " + this.name); }, 1000); } }; obj.sayLater(); // Später, ich bin David