W JavaScript kod osadzony w przeglądarce działa w globalnym zakresie.
Obiekt window reprezentuje globalny kontekst w przeglądarkach:
- window jest obiektem specyficznym dla przeglądarek, inne środowiska np. Node.js mają swój globalny obiekt (global w Node.js)
- każda zmienna zadeklarowana w globalnym zakresie za pomocą var (lub bez słowa kluczowego) staje się właściwością obiektu window.
- zmienne z let/const również są globalne, jeśli znajdują się poza funkcją lub blokiem, ale nie są przypisywane do obiektu window.
Po co 'globalny kontekst' został tak zaimplementowany w JavaScript (w taki sposób)?
- JavaScript został zaprojektowany jako język dla stron internetowych, który pierwotnie działał wyłącznie w przeglądarce.
- Globalny kontekst zaprojektowano tak by skrypty mogły współdzielić ten sam kontekst (manipulować DOM, współdzielić dane globalne).
- Każde wykonanie kodu JavaScript na stronie internetowej (poprzez ponowne załadowanie skryptu) nie resetuje globalnego kontekstu,
lecz jedynie uruchamia nowy fragment kodu w istniejącym środowisku.
W JavaScript nazwy obiektów są rozróżniane pod względem wielkości liter, więc window i Window to nie to samo.
✅ window – to instancja globalnego obiektu w przeglądarce.
Można go traktować jako konkretny obiekt reprezentujący okno przeglądarki i jego globalny kontekst wykonania.
❌ Window – to nazwa konstruktora/funkcji tworzącej obiekty typu window.
Nie używa się jej często bezpośrednio, ale można np. sprawdzić typ window przez window instanceof Window, co zwróci true.
Podsumowując: w kontekście przeglądarki obiekt globalny to window, a Window to jego konstruktor.
Użycie globalThis (zalecany sposób):
globalThis to uniwersalny sposób na dostęp do globalnego zakresu, działa zarówno w przeglądarce, Node.js i Web Workers
globalThis.globalVar = "Dostępne globalnie";
console.log(globalThis.globalVar); // "Dostępne globalnie"