为什么这个全局变量不会在数组中更新?

问题描述 投票:1回答:2

我正在用Javascript制作一个小型Webapp。除了1个可能简单的东西之外,我让所有东西都可以工作。我有2个必须保持全局性的全局变量,因为稍后必须在其他函数中使用它们:

var staffmembername;

var data = {
  "personaldata": [{
      "name": staffmembername,
      "location": "Iowa"
    },
    {
      "name": "Cynthia",
      "location": "California",
    }
  ]

};

'data'数组使用'stafmembername'变量。 “ stafmembername”变量将其值更改为选定的选项值。如您所见,感谢带有警报的测试。数组中的变量似乎如何保持未定义状态。

其余代码:

document.getElementById("confirmchoice").onclick = function() {

  var e = document.getElementById("staffmember");
  pickedname = e.options[e.selectedIndex].text;
  document.getElementById("nr1").value = pickedname;
  staffmembername = document.getElementById("nr1").value;
  alert(staffmembername);

  document.getElementById("h3tl").innerHTML = "name:" + data.personaldata[0].name + "<br>"
  + "location: " + data.personaldata[0].location;

} 

如果我将变量放入函数中,则可以,但是其他函数将不起作用。那么有没有办法在保持两个变量都全局的同时更新数组中的变量呢?

JSFIDDLE

javascript arrays function variables global
2个回答
0
投票

staffmembername会在您初始化data时进行评估,因为它是按值传递的。因此,它在data中的值永远不变。您可以将data包装在函数中。每次调用该函数都会评估staffmembername,而不仅是在初始化时:

var staffmembername;

var data = function () {
   return {
    "personaldata": [{
      "name": staffmembername,
      "location": "Iowa"
    },
    {
      "name": "Cynthia",
      "location": "California",
    }
   ]
  };
 }
};

0
投票

之所以会这样,是因为您的数据对象已经创建,并且其中的name属性不再被更新。您可以通过调用方法来创建数据对象,这将采用最新值。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.