【入門編】モジュールスコープとグローバルスコープの境界:ブラウザのscriptタグとES Modulesのメモリ空間の違い – JavaScriptコア文法・モダン言語仕様と変数・関数解析バイブル

こんにちは!フロントエンドからNode.jsの深層までコードを書き続けている、ちょっとお節介な先輩エンジニアです。

皆さんは普段、HTMLファイルに`

この「どこからでもアクセスできる」という特性は、一見すると便利に思えますよね。しかし、これが大規模なアプリケーションになると大惨事を引き起こします。Aというライブラリが使っている変数名と、Bという自作スクリプトの変数名がたまたま同じだった場合、知らぬ間に値が上書きされてしまう(名前空間の汚染)という悪夢のようなバグを生むのです。

「これじゃいかん!」ということで、モダンなJavaScriptには、変数を安全なカプセル(小部屋)に閉じ込める仕組みが導入されました。それが ES Modules (ESM) です。

---

2. `type="module"` がもたらす革命:モジュールスコープの隔離

HTMLでES Modulesを使うには、`

`type="module"` が指定されたスクリプトファイルは、自動的にモジュールスコープという独立した隔離空間に配置されます。

イメージ図:グローバル空間 vs モジュール空間

【従来のグローバル空間(共有の広場)】
[ script A ] ==> [ グローバルオブジェクト (window) ] <== [ script B ] (変数が混ざり合い、衝突リスク大!) 【モジュールスコープ(厳重に管理された個室)】 [ モジュール A の個室 ] --(完全隔離)-- [ モジュール B の個室 ] │ │ (本当に必要なものだけ `export` で外部へ公開) 実際にコードでその違いを見てみましょう。 // counter.js (type="module"として読み込まれるファイル) const count = 42; // モジュールスコープ(このファイルの外からは絶対に見えない!) console.log(count); // 42 は普通に出力される この `counter.js` を読み込んだ後、別の`

シェアする
javascriptintronationalをフォローする
タイトルとURLをコピーしました