2013-01-15 35 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' 
    }; 
}