<AI>
結論から言うと、JavaScriptの実行コンテキスト(変数や関数などの実行環境)自体をプログラムから直接作成・拡張することはできません。
これらはJavaScriptエンジンが内部で自動管理する仕組みです。
しかし、「変数を追加したい」「参照できるメソッドを増やしたい」という目的であれば、以下の方法で実現できます。
1. グローバルコンテキスト(スコープ)への追加
一番手軽な方法です。
グローバルオブジェクト(ブラウザなら window、Node.jsなら global)にプロパティを追加すると、どこからでも参照できる変数や関数として機能します。
javascript
window.myVariable = "こんにちは";
window.myFunction = function() {
console.log(window.myVariable);
};
// どこからでも呼び出せる
myFunction();
2. 関数コンテキスト(スコープ)の拡張
既存の関数コンテキストに機能を追加したい場合、クロージャ(関数内関数)を活用します。
外側のスコープで宣言された変数は、内側の関数から参照・保持され続けます。
javascript
function createCounter(initialValue) {
let count = initialValue; // 実行コンテキストに追加された独自の変数
return function() {
count++;
return count;
};
}
const myCounter = createCounter(10);
console.log(myCounter()); // 11
3. オブジェクトの拡張(プロトタイプ)
文字列や配列といったビルトインオブジェクトの実行コンテキストに自分専用のメソッドを追加したい場合は、prototype を使用します。
javascript
// 例: 文字列オブジェクトに独自のメソッドを追加する
String.prototype.sayHello = function() {
return `Hello, ${this}!`;
};
console.log("太郎".sayHello()); // Hello, 太郎!
また、関連する値をまとめて管理したい場合は、ES2020で導入された globalThis オブジェクトを使用すると、
環境(ブラウザ、Web Worker、Node.js)に依存せず安全にグローバル空間へアクセスできます。
詳しくは MDN Web DocsのglobalThisリファレンス を参照してください。