5

我需要对我的代码进行一些快速测试(在函数中获取一些变量的值),并且我想将它们全球化,这样我就可以通过控制台访问它们。

我知道这种方法:

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等?

我不希望这是一个代码高尔夫问题,只是一个普通的编程问题。

4

3 回答 3

3

我不认为有办法做到这一点。看到这个:

访问所有局部变量

您是否尝试过在控制台中简单地调试?使用 Chrome,您可以设置断点,然后检查所有值。看看这个教程:

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

于 2013-01-15T03:17:21.593 回答
2

为什么不是单个globals对象而不是一堆变量?

function foo() {
    window.globals = {
        foo1 = 'foo',
        foo2 = 'foo',
        foo3 = 'foo',
        foo4 = 'foo',
        foo5 = 'foo',
        foo6 = 'foo',
        foo7 = 'foo',
        foo8 = 'foo'
    };
} 
于 2013-01-15T03:22:18.170 回答
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
于 2013-01-15T03:21:48.750 回答