グローバルオブジェクト

(Web関連用語)
https://maru-note.net/entry/2023/08/27/225745

JavaScript では、コードの実行前にグローバルオブジェクトと呼ばれるオブジェクトが JavaScript の実行エンジンによって一つ生成され、グローバルスコープ(※)に存在する。
(※)最も広いスコープで、プログラムのどこからでも参照できる。関数などのブロック{…}で囲まれていない領域である。

ややこしいのがブラウザで実行する場合と node.js 等の他の JavaScript 実行エンジンで実行する場合とではグローバルオブジェクトは異なる点である。
それぞれ名前は以下の通りで、存在するプロパティも異なる。

  • ブラウザで実行する場合:window
  • node.jsで場合:global

主な特徴

  1. グローバルオブジェクトな変数や関数は、グローバルオブジェクトのプロパティとしてアクセスが可能。
  2. var で宣言した変数はグローバルオブジェクトの変数(プロパティ)となる。let、const はならない。
  3. グローバルスコープで宣言した関数は、グローバルオブジェクトの関数(プロパティ)になる。
  4. 省略が可能。[グローバルオブジェクト].[プロパティ名]は、単に[プロパティ名]でアクセス可能である。

※2. 関数の中で var で宣言した変数はグローバルオブジェクトの変数にはならず、関数の外からアクセスすることもできない。

以下の例だと、変数hogeは、window.hogeと書いても呼び出せる。
※ブラウザで実行した場合を想定して window と書いている。node.js なら global になる。

var hoge = 1;
console.log( hoge ); // 1
console.log( window.hoge ); // 1

同様にグローバルスコープで宣言した関数hello()は、window.hello()と書いても呼び出せる。

function hello(){
  console.log( "hello!" )
};
hello(); // hello!
window.hello(); // hello!

window

window は JavaScript をブラウザで実行した際に生成されるグローバルオブジェクトである。
document や alert() などのプロパティがある。window.alert(“hello”);で警告ダイアログを出せる。
よく使うdocument.getElementById(“XXX”)もwindowオブジェクトのプロパティを利用している(正式には window.document.getElementById(“XXX”) )。

global

https://nodejs.org/docs/latest/api/globals.html
global は JavaScript をnode.jsで実行した際に生成されるグローバルオブジェクトである。
node.js の公式サイトの「ドキュメント」から nodeのバージョン毎に global のプロパティを確認できる。

globalThis

標準化されたグローバルオブジェクトの名前として追加されたもので、環境に関わらず利用が可能である(=globalThisはブラウザ、Node.jsがもつ共通のグローバルオブジェクト)。

console.log(globalThis === window); // true

例えば alert() を呼び出すのであれば、window.alert()と書いても globalThis.alert() と書いても同じ結果になるということである。
node.js でも同様である。

console.log(globalThis === global); // true
inserted by FC2 system