首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么这个全局变量不能在数组中更新呢?

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

Stack Overflow用户
提问于 2020-05-05 14:14:28
回答 2查看 249关注 0票数 1

我正在用Javascript制作一个小的网络应用程序。除了一件可能很简单的事外,我每件事都在工作。我有两个必须保持全局的全局变量,因为稍后我必须在其他函数中使用它们:

代码语言:javascript
运行
复制
var staffmembername;

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

};

'data‘数组使用'stafmembername’变量。“stafmembername”变量将其值更改为选定的选项值。正如你所看到的,多亏了测试的警觉。数组中的变量是如何保持未定义的。

其余代码:

代码语言:javascript
运行
复制
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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-05 14:28:08

staffmembername是在初始化data时计算的,因为它是通过值传递的。因此,它在data中的价值永远不会改变。您可以将data封装在一个函数中。每次调用函数时都会对staffmembername进行评估,而不仅仅是在初始化时:

代码语言:javascript
运行
复制
var staffmembername;

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

然后像这样使用它:

data().personaldata[0].location

您还可以为staffmembername使用一个对象。

代码语言:javascript
运行
复制
var staffmembernameObject = {};

var data = [{
  personaldata: [{
    name: staffmembernameObject,
...
staffmembernameObject.data = document.getElementById("nr1").value;

然后像这样使用它: data.personaldata.name.data

票数 0
EN

Stack Overflow用户

发布于 2020-05-05 14:19:36

之所以会发生这种情况,是因为您的数据对象已经创建,并且它中的name属性没有再次更新。您可以通过调用一个方法来创建数据对象,这将获得最新的值。

代码语言:javascript
运行
复制
function getData() {
    return {
        "personaldata": [{
            "name": staffmembername,
            "location": "Iowa"
            },
            {
            "name": "Cynthia",
            "location": "California",
            }
        ]
    };
}

参见此小提琴

另一种选择可以是将staffmembername作为对象并更新其值,这样,您就能够访问更新的对象。

代码语言:javascript
运行
复制
var staffmembername = {value: ''};

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

};

document.getElementById("confirmchoice").onclick = function() {
  var e = document.getElementById("staffmember");
  pickedname = e.options[e.selectedIndex].text;
  document.getElementById("nr1").value = pickedname;
  staffmembername.value = document.getElementById("nr1").value;
  alert(staffmembername);
  document.getElementById("h3tl").innerHTML = "name:" + data.personaldata[0].name.value + "<br>" + "location: " + data.personaldata[0].location;


}

参见此小提琴

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61615203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档