【问题标题】:How can I store a reference to a variable in javascript?如何在javascript中存储对变量的引用?
【发布时间】:2019-04-17 19:49:47
【问题描述】:

在下面的示例中,第一次应该打印出 false,但之后应该将其更改为 true。但它保持最初分配的值。

var i = {
  control: {
      a: false,
      b: false,
  }
}

var test = i.control['a'];

setInterval(function () {
  document.body.innerHTML += test + ', ';
  i.control['a'] = true;
}, 500);

我希望能够从外部更新变量,但循环需要能够检查变量设置的内容(可以是该对象中的任何值,并将在初始化时设置)。

我这样做是为了保持代码干净,并且不必在每个循环中创建一个新变量来获取/存储最新值。

【问题讨论】:

  • 你不能。 JavaScript 中没有“对变量的引用”(有一些边缘情况作为例外,但没有任何东西可以作为参数传递给函数)。为什么不直接写document.body.innerHTML += i.control['a'] + ', ';?你想解决什么问题?
  • 是的,这确实解决了我的问题,我基本上只是想让代码更易于阅读和编写,因为在我的真实代码中,测试变量要长一些,而我没有我不想每次都输入整个内容,我希望它一眼就能理解,这样添加它的人就不必进行大量的复制粘贴。
  • JavaScript 总是pass by value,所以改变变量的值永远不会改变底层的原语。 var 存储指针,因此它通过指针的值传递。
  • @stackers 将return i.control['a'] 放入一个函数中,如果你需要多次调用它
  • 我认为你是对的,一个函数可能是要走的路,而且很干净:test('a')

标签: javascript loops object variables reference


【解决方案1】:

您可以获取对象引用并获取值的最后一个键。

var i = { control: { a: false, b: false } },
    test = i.control;

setInterval(function () {
    document.body.innerHTML += test.a + ', ';
    i.control.a = true;
}, 500);

【讨论】:

  • 我认为这不适用于我的情况,因为 ['a'] 也需要分配给该变量,因为它可以是任何其他值,例如 ['b']
  • 您的用例非常不清楚。你到底喜欢做什么?
  • 我只是想通过编辑控件对象使代码更容易编写和更新。我可以硬编码 test 的值,我只是在寻找一种让它更干净的方法。
  • @stackers 要么工作只需将 i.control.a 替换为 i.control['a'] 这是同一件事
  • 然后我需要另一个变量,因为它可能是 a 或 b,所以它最终会是 i.control[i.key.a],它已经比我希望的要复杂了跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-01
  • 1970-01-01
  • 2019-06-29
  • 1970-01-01
  • 2018-12-20
相关资源
最近更新 更多