(Web関連用語)
https://maru-note.net/entry/2023/08/27/225745
JavaScript では、コードの実行前にグローバルオブジェクトと呼ばれるオブジェクトが JavaScript の実行エンジンによって一つ生成され、グローバルスコープ(※)に存在する。
(※)最も広いスコープで、プログラムのどこからでも参照できる。関数などのブロック{…}で囲まれていない領域である。
ややこしいのがブラウザで実行する場合と node.js 等の他の JavaScript 実行エンジンで実行する場合とではグローバルオブジェクトは異なる点である。
それぞれ名前は以下の通りで、存在するプロパティも異なる。
- ブラウザで実行する場合:window
- node.jsで場合:global
主な特徴
- グローバルオブジェクトな変数や関数は、グローバルオブジェクトのプロパティとしてアクセスが可能。
- var で宣言した変数はグローバルオブジェクトの変数(プロパティ)となる。let、const はならない。
- グローバルスコープで宣言した関数は、グローバルオブジェクトの関数(プロパティ)になる。
- 省略が可能。[グローバルオブジェクト].[プロパティ名]は、単に[プロパティ名]でアクセス可能である。
※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