2013-01-15 8 views
5

私は自分のコード(関数内でいくつかの変数の値を得る)を使って素早くテストを行う必要があり、それらをグローバル化したいので、コンソールからアクセスできます。JavaScriptで多くの変数をすばやくグローバル化する方法はありますか?

私はこの方法を知っている:

function foo() { 
    var foo = 'foo'; 
    window.foo = foo; // Make foo global 
} 

しかし、私はこのような何かがあった場合:

function foo() { 
    var foo1 = 'foo'; 
    var foo2 = 'foo'; 
    var foo3 = 'foo'; 
    var foo4 = 'foo'; 
    var foo5 = 'foo'; 
    var foo6 = 'foo'; 
    var foo7 = 'foo'; 
    var foo8 = 'foo'; 
} 

window.foo1 = foo1を介さずに、すべてのこれらの変数をグローバル化するための迅速な方法であるもの、window.foo2 = foo2、等。?

これはコードゴルフの質問ではなく、普通のプログラミングの質問です。

+0

foo()の中にブレークポイントを設定して値にアクセスできますか? – beezir

+0

@beezir Erm ...あなたが話していることを正確には知らない...ごめんなさい...ブレークポイントが何であるかをさらに詳しく説明できますか? – think123

+0

グローバル配列を作成するだけでなく、forループを使用してその配列を構築することもできます。私は思っていたより速く構築されていません(まだO(N))が、少なくともそれはもっとアクセスしやすいです。 – aug

答えて

3

私はこれを行う方法がないと思います。これを参照してください。

Access all local variables

はあなたがコンソールにデバッグを簡単に試したことがありますか? Chromeでは、ブレークポイントを設定してからすべての値を検査できます。このチュートリアルをチェックアウト:

https://developers.google.com/chrome-developer-tools/docs/scripts-breakpoints

+0

はい、それでも 'console.log(foo1);'、 'console.log(foo2);'などの取引です。 – think123

+0

これは今ではありませんか?私は本当にわからないのですか? – think123

+0

解答のチュートリアルのリンクで解答が更新されました。 –

0

彼らはすべて、単にそのように名付けられ、あなたはほとんど知られていないトリックを利用することができている場合は、変数は実際の辞書です:

function foo() { 
    var foo1 = 'foo'; 
    var foo2 = 'foo'; 
    var foo3 = 'foo'; 
    var foo4 = 'foo'; 
    var foo5 = 'foo'; 
    var foo6 = 'foo'; 
    var foo7 = 'foo'; 
    var foo8 = 'foo'; 
    for (var i = 1; i <= 8; i++) { 
    window["foo" + i] = eval("foo" + i); 
    } 
} 

document.write("Running foo...<br/>"); 
foo(); 

document.write("Printing foo...<br/>"); 
for (var i = 1; i <= 8; i++) { 
    document.write(window["foo" + i]); 
} 

document.write("<br/>Just one: " + foo3);// Normal variable notation 
+0

'変数は実際には辞書です。かなり不明瞭なコメント。変数は、ローカル変数オブジェクト([ECMA-262 ed 4](http://bclary.com/2004/11/07/#a-10.1.3))または環境レコード([ES5](http:/ecma-international。org/ecma-262/5.1 /#sec-10.2.1))。あなたのコードはスコープチェーン上のオブジェクトプロパティへのアクセスを模倣するために 'eval'を使いますが、スコープをローカル実行コンテキストに限定することはできないので危険です。また、ローカル実行コンテキストまたはスコープチェーンに存在しないウィンドウオブジェクトのプロパティを作成することもあります。 – RobG

+0

私は明確化を感謝します。私の単純化された陳述は私が頭の上から出すことができるすべてでした。評価については、私はそれを避ける方法を探しています、私は本当にそれを使用して嫌いです。 –

2

なぜ単一ではありません変数の束の代わりにglobalsオブジェクト?

function foo() { 
    window.globals = { 
     foo1 = 'foo', 
     foo2 = 'foo', 
     foo3 = 'foo', 
     foo4 = 'foo', 
     foo5 = 'foo', 
     foo6 = 'foo', 
     foo7 = 'foo', 
     foo8 = 'foo' 
    }; 
} 
関連する問題