ホームページ >ウェブフロントエンド >jsチュートリアル >異なるスコープにわたるローカル JavaScript 変数にアクセスするにはどうすればよいですか?
スコープ内の変数へのアクセス
JavaScript では、通常、現在のスコープ内のすべての変数を取得することは実現できません。ただし、特定のシナリオでは、特定の関数で定義されたローカル変数を取得することができます。
次の関数について考えてみましょう:
var f = function () { var x = 0; console.log(x); };
この関数からローカル変数を抽出するには、次のようにします。それを文字列に変換できます:
var s = f + ''; // Output: 'function () {\nvar x = 0;\nconsole.log(x);\n}'
Esprima などの解析ツールを使用すると、関数のコードを分析して、ローカル変数宣言の識別:
s = s.slice(12); // Remove 'function () ' var result = esprima.parse(s); // Filter for VariableDeclaration objects var variables = result.body.filter(function (obj) { return obj.type === 'VariableDeclaration'; });
これにより、宣言された変数名とその値を含むオブジェクトの配列が提供されます。ただし、この方法は関数自体内で定義されたローカル変数の抽出に限定されます。
入れ子関数が存在する状況では、親関数のローカル変数に直接アクセスすることはできません。ただし、呼び出し元プロパティ (arguments.callee.caller.caller.caller など) を利用して呼び出しスタックを走査し、変数名を徐々に収集することはできます。
この手法により、現在のスコープを超えたスコープへのアクセスが可能になります。機能に限界があることを認識することが不可欠です。スコープの境界を越えて変数を取得する機能は JavaScript に本来備わっているものではなく、上記のような特定の戦略が必要です。
以上が異なるスコープにわたるローカル JavaScript 変数にアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。