Skip to content

this im globalen Kontext - Ein unterschätzter Stolperstein

Published: at 06:00 AMSuggest Changes

this im globalen Kontext: Ein unterschätzter Stolperstein

Das Verhalten von this im globalen Kontext ist ein oft übersehener, aber besonders wichtiger Aspekt, denn genau hier beginnen viele Missverständnisse. Gerade für JavaScript-Einsteiger:innen wirkt es zunächst widersprüchlich, wie sich this verhält, sobald es nicht innerhalb eines Objekts, einer Methode oder einer Funktion steht. Doch auch erfahrene Entwickler:innen können bei der Arbeit mit unterschiedlichen Ausführungsumgebungen wie z. B. Browser vs. Node.js ins Stolpern geraten.

this im Browser

Im Browser verweist this im globalen Kontext auf das globale Objekt, das window heißt. Das bedeutet: Variablen oder Funktionen, die im globalen Scope deklariert werden, werden automatisch Eigenschaften von window.

console.log(this); // window

var name = "Ava";
console.log(this.name); // "Ava"

In diesem Beispiel ist name durch var automatisch Teil des globalen Objekts. Somit ist this.name identisch mit window.name. Das kann hilfreich sein – aber auch zu unerwartetem Verhalten führen, wenn z. B. globale Variablen versehentlich überschrieben werden.

Achtung: Variablen, die mit let oder const deklariert werden, gehören nicht zum window-Objekt:

let age = 30;
console.log(this.age); // undefined

Das liegt daran, dass moderne JavaScript-Sprachfeatures wie let, const oder auch class im globalen Scope keinen automatischen Bezug mehr zu window herstellen. Das erhöht die Sicherheit und Modularität des Codes – bedeutet aber auch, dass this nicht mehr zuverlässig auf globale Werte zugreifen kann, wenn moderne Syntax verwendet wird.

this in Node.js

In Node.js sieht das Ganze noch einmal anders aus. Hier gibt es kein window, sondern das globale Objekt heißt global. Doch selbst das ist nicht direkt mit this verknüpft.

console.log(this); // {}

global.name = "Node";
console.log(this.name); // undefined

Warum ist das so? In Node.js ist jede Datei ein eigenes Modul und in Modulen verweist this auf ein leeres Objekt ({}), nicht auf global. Das schützt vor unbeabsichtigten Nebeneffekten und unterstützt die Kapselung, was in serverseitigem JavaScript besonders wichtig ist.

Erst wenn man explizit mit dem global-Objekt arbeitet, kann man dort Daten ablegen und abrufen:

global.version = "18.x";
console.log(global.version); // "18.x"

Aber: this.version würde hier nicht funktionieren, da this innerhalb eines Moduls nicht mit global verknüpft ist.

Einfluss des Strict Mode auf this im globalen Kontext

Der Strict Mode ("use strict") ist eine weitere Variable im Spiel. Sobald dieser Modus aktiviert wird, verändert sich das Verhalten von this innerhalb von Funktionen, die im globalen Scope aufgerufen werden.

"use strict";

function showThis() {
  console.log(this);
}

showThis(); // undefined

Ohne Strict Mode wäre this in der Funktion showThis auf das globale Objekt (window im Browser) verwiesen. Mit aktiviertem Strict Mode hingegen ist this immer undefined. Diese Änderung dient dazu, Fehlerquellen zu reduzieren. Das soll insbesondere unbewusste Zugriffe auf das globale Objekt, die zu schwer nachvollziehbaren Bugs führen können, verhindern.

Fazit: Warum ist das wichtig?

Gerade im globalen Kontext können kleine Unachtsamkeiten große Auswirkungen haben. Wer unabsichtlich auf this im globalen Scope zugreift oder sich darauf verlässt, dass this auf window zeigt, erzeugt schnell schwer wartbaren Code. Moderne Best Practices, wie Module, striktes Scoping mit let/const und der Einsatz von Klassen oder Closures, helfen, diese Probleme zu umgehen.

Dennoch bleibt es entscheidend, das Verhalten von this im globalen Kontext zu verstehen, denn selbst Frameworks wie React oder Vue nutzen JavaScript unter der Haube und gerade bei der Initialisierung oder bei Debugging-Aufgaben kann dieses Wissen sehr hilfreich sein.


Buy me a coffee

Wenn Dir meine Beiträge gefallen und sie Dir bei Deiner Arbeit helfen, würde ich mich über einen “Kaffee” und ein paar nette Worte von Dir freuen.

Buy me a coffee



Previous Post
this in Funktionen – dynamisches Verhalten klar erklärt
Next Post
JavaScript verstehen - Methodenbindung mit .bind(), .call() und .apply() richtig einsetzen