🧱

JSでグローバル定数を作りたい

2022/09/05に公開

はじめに

JavaScriptではしばしばスコープに苦しめられる。letconstはブロックスコープでスコープを超えた参照ができない。今回、どうしてもグローバルな定数を定義したかったので、その解決策をメモる。

結論、Object.defineProperty()を使うことで解決できた。
ほぼほぼ参考ページに書いてある通りに実装すれば問題なさそうだが、今回自分はグローバル定数が1つだけ欲しかったので、わざわざ関数には切り出さず擬似的にグローバル定数を作成した。

実装

global-const.js
<script>
    // 擬似的にグローバル定数定義
    Object.defineProperty(window, 'GLOBAL_CONST', {
        value: 'global constant',
        writable: false
    });
</script>

Object.defineProperty()の第一引数にwindowオブジェクトを渡すことで、どこからでもGLOBAL_CONSTを参照できるというカラクリ。

どこで書き換えられるか分からないコードは怖いので、イミュータブルにできて安心。できれば、あまりスコープを超えたくないのですが。。。

参考ページ

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty
https://pisuke-code.com/js-way-to-create-global-constant/
https://developer.mozilla.org/ja/docs/Web/API/Window

Discussion