2013-01-15 79 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 = foo1window.foo2 = foo2,等等。?

我不希望這是一個代碼高爾夫球問題,只是一個正常的編程問題。

+0

你可以在foo()中設置一個斷點來訪問這些值嗎? – beezir

+0

@beezir呃......不完全知道你在說什麼......對不起......你能解釋一下什麼是斷點嗎? – 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-國際。組織/ ECMA-262/5.1 /#仲丁基10.2.1))。你的代碼使用'eval'來模仿作用域鏈上的對象屬性訪問,但這是一個危險的技巧,因爲你不能將作用域限制在本地執行上下文中。此外,它可能會創建窗口對象的屬性,這些屬性不存在於本地執行上下文或作用域鏈中。 – RobG

+0

我讚賞澄清。我的過分簡單的陳述就是我所能想出的一切。至於eval,我正在研究如何避免這種情況,我真的很討厭使用它。 –

2

爲什麼不是一個單一的globals對象而不是一堆變量?

function foo() { 
    window.globals = { 
     foo1 = 'foo', 
     foo2 = 'foo', 
     foo3 = 'foo', 
     foo4 = 'foo', 
     foo5 = 'foo', 
     foo6 = 'foo', 
     foo7 = 'foo', 
     foo8 = 'foo' 
    }; 
}