2016-05-29 7 views
0

varキーワードを使用して、ファイル・スコープの変数を宣言し、次のコードを考える:配列宣言を使用して 'var'で宣言されたファイルスコープ変数にアクセスするにはどうすればよいですか?

// File a.js 

var foo = "Hello, foo!"; // I know I can remove 'var', but that's not what I'm asking 

logVar("foo"); 

function logVar(name) { 

    var text = global[name]; // 'global' does not work to access 'foo'!!! 

    console.log(text); 
} 
私は(配列表記を使用して、ファイル・スコープの変数 fooにアクセスする方法を知っていただきたいと思います

すなわち、テキスト与えられました変数名 - global["foo"]のようなものですが、これは動作しません)。

私はこれを検索するのに約1時間を費やしました。すなわちhere,here、またはhereです。ファイルのスコープでの構文(ではなく)を使用すると、変数はglobalスコープには表示されず、Nodeがファイルをラップするために作成するファイルのクロージャの範囲に表示されます。

今、変数宣言からvarを削除することができます。しかし、それは私が求めていることではありません。

varで宣言されたファイルスコープ変数に、変数名を表すテキスト文字列を指定して配列表記を使用してアクセスできるかどうかを知りたいと思います。

これはNodeで可能ですか?もしそうなら、どうですか?

+2

私はそれができないと言いたいと思います。グローバルスコープのレキシカル環境がバインディング(グローバルスコープは非常に特殊なものです)として利用できるようになっているためですが、これはモジュールスコープで利用できるとは限りません。 – MinusFour

答えて

0

globalという名前のノードにグローバルオブジェクトがありますが、varキーワードを省略しない限り、宣言した変数はありません。 foo = "hello"と宣言し、global["foo"]でアクセスしてください。ただし、グローバル変数の宣言には十分注意してください。グローバルな状態が必要な場合は、すべてのグローバル変数が1つの場所にあり、ネームスペースが乱雑にならないように、すべてのオブジェクトをすべて1つのオブジェクトの内部に保つ方がよいでしょう。あなたは、このようにそれをしない場合は例えば、

var globalVars = { 
    foo: "hello" 
}; 

console.log(globalVars["foo"]); 

は、奇妙なものはglobal["console"].log()のように発生する可能性があります。 1つのグローバルオブジェクトの内部にグローバル状態を置くことは、より組織化されたアプローチです。

関連する問題