LoginSignup
0
0

global object 【JavaScript】

Last updated at Posted at 2024-05-22

はじめに

global object とは、簡単に言えば「コードのどこからでもアクセスできるオブジェクト」です。
ホスト環境(Node.jsや各種ブラウザなど)によって実装が変わります。

※コメントいただきました。
globalThisを使用すればホスト環境に関係なくglobal objectにアクセスできるようです。
ただし、挙動が変化することはないようです。Node.jsのglobalThisglobalと同じ挙動をし、ブラウザのwindowもしくはglobalThisとは違う挙動をします。

ブラウザの場合:window

Chrome, Firefox, Safari, Edgeの各ブラウザはglobal objectとしてwindowを使用します。

See the Pen Qiita_global_window by Kohki_Takatama (@Kohki-Takatama) on CodePen.

※このボタンはブラウザのconsoleに情報を出力します。F12を押して、開発者ツールからconsoleを確認してください。

このデモは、以下の事項を示しています。

  • constを使用した変数宣言は、window.nameではアクセスできない
  • varを使用した変数宣言は、window.nameでアクセスできる
  • console.logwindow.console.logは完全に等しい
  • 関数宣言functionを使用した場合、window.name()でアクセスできる
  • 関数式の場合は、変数と同じくconstではアクセスできず、varならアクセスできる

なお、constで宣言した変数・関数もwindow.property = 変数 | 関数と明示すればアクセス可能(推奨はされない)

node.jsの場合:global

Node.js の場合は、各ファイルが独自のmoduleスコープを持っているようです。
global objectはファイルを超えてのアクセスが可能になるようです。

main.js
global.sayHello = function(name) {
    console.log(`Hello, ${name}!`);
};

const moduleB = require('./moduleB');
moduleB.greetUser('Alice');
moduleB.js
module.exports.greetUser = function(name) {
    // グローバル関数を呼び出す
    sayHello(name);
};

ブラウザのwindowと比較していきます。

変数・関数の挙動

var hoge = "hoge"
console.log(global.hoge) //undefined
const fuga = "fuga"
console.log(global.fuga) //undefined

ブラウザのwindowと違い、varでの宣言であってもglobal.nameでのアクセスができません。

global.property = variableと明示することでアクセス可能なのは、windowと同様です。

// 先程の続き
global.hoge = hoge
global.fuga = fuga
console.log(global.hoge) // "hoge"
console.log(global.fuga) // "fuga"

関数も同様です。

console.logglobal.console.log

ブラウザのwindowと同様に、console.logglobal.console.log は等しいです。

console.log("normal console") // "normal console"
global.console.log("global console") // "global console"
console.log(console.log === global.console.log) // true

おわりに

以上、global objectについてでした。

「ホスト環境によって違いがある」具体例として扱いました。
実際はより多くの差異・特徴があると思います。

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0