Javascript 为什么赢了';数组中是否有此全局变量更新?

Javascript 为什么赢了';数组中是否有此全局变量更新?,javascript,arrays,function,variables,global,Javascript,Arrays,Function,Variables,Global,我正在用Javascript制作一个小的Web应用程序。除了一件可能很简单的事情外,我什么都做得很好。我有两个全局变量必须保持全局,因为我以后必须在其他函数中使用它们: var staffmembername; var data = { "personaldata": [{ "name": staffmembername, "location": "Iowa" }, { "name": "Cynthia", "location

我正在用Javascript制作一个小的Web应用程序。除了一件可能很简单的事情外,我什么都做得很好。我有两个全局变量必须保持全局,因为我以后必须在其他函数中使用它们:

var staffmembername;

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

};
“data”数组使用“stafmembername”变量。“stafmembername”变量将其值更改为选定的选项值。正如您所看到的,这要感谢alert的测试。数组中的变量似乎始终未定义

代码的其余部分:

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;

} 
document.getElementById(“confirmchoice”).onclick=function(){
var e=document.getElementById(“员工成员”);
pickedname=e.options[e.selectedIndex].text;
document.getElementById(“nr1”).value=pickedname;
staffmembername=document.getElementById(“nr1”).value;
警报(staffmembername);
document.getElementById(“h3tl”).innerHTML=“name:+data.personaldata[0]。name+”
” +位置:“+data.personaldata[0]。位置; }
如果我把变量放在函数中,它就可以工作,但是我的其他函数就不能工作了。那么,有没有一种方法可以更新数组中的变量,同时保持两个变量的全局性


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

function getData() {
    return {
        "personaldata": [{
            "name": staffmembername,
            "location": "Iowa"
            },
            {
            "name": "Cynthia",
            "location": "California",
            }
        ]
    };
}
看到这个了吗


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

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;


}
var staffmembername={value:''};
风险值数据={
“个人数据”:[{
“姓名”:员工成员姓名,
“地点”:“爱荷华州”
},
{
“姓名”:“辛西娅”,
“地点”:“加利福尼亚”,
}
]
};
document.getElementById(“confirmchoice”).onclick=function(){
var e=document.getElementById(“员工成员”);
pickedname=e.options[e.selectedIndex].text;
document.getElementById(“nr1”).value=pickedname;
staffmembername.value=document.getElementById(“nr1”).value;
警报(staffmembername);
document.getElementById(“h3tl”).innerHTML=“name:”+data.personaldata[0]。name.value+”
“+”位置:“+data.personaldata[0]。位置; }

请参见此

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

function getData() {
    return {
        "personaldata": [{
            "name": staffmembername,
            "location": "Iowa"
            },
            {
            "name": "Cynthia",
            "location": "California",
            }
        ]
    };
}
看到这个了吗


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

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;


}
var staffmembername={value:''};
风险值数据={
“个人数据”:[{
“姓名”:员工成员姓名,
“地点”:“爱荷华州”
},
{
“姓名”:“辛西娅”,
“地点”:“加利福尼亚”,
}
]
};
document.getElementById(“confirmchoice”).onclick=function(){
var e=document.getElementById(“员工成员”);
pickedname=e.options[e.selectedIndex].text;
document.getElementById(“nr1”).value=pickedname;
staffmembername.value=document.getElementById(“nr1”).value;
警报(staffmembername);
document.getElementById(“h3tl”).innerHTML=“name:”+data.personaldata[0]。name.value+”
“+”位置:“+data.personaldata[0]。位置; }

见此

staffmembername
在初始化
数据时进行计算,因为它是按值传递的。所以它在
数据中的值永远不会改变。您可以将
数据
包装到函数中
staffmembername
将在每次调用函数时进行计算,而不仅仅是在初始化时:

var staffmembername;

var data = function () {
   return {
    "personaldata": [{
      "name": staffmembername,
      "location": "Iowa"
    },
    {
      "name": "Cynthia",
      "location": "California",
    }
   ]
  };
 }
};
然后像这样使用它:

data().personaldata[0]。位置

您还可以将对象用于
staffmembername

var staffmembernameObject = {};

var data = [{
  personaldata: [{
    name: staffmembernameObject,
...
staffmembernameObject.data = document.getElementById("nr1").value;
然后像这样使用它:
data.personaldata[0].name.data

staffmembername
在初始化
数据时进行计算,因为它是按值传递的。所以它在
数据中的值永远不会改变。您可以将
数据
包装到函数中
staffmembername
将在每次调用函数时进行计算,而不仅仅是在初始化时:

var staffmembername;

var data = function () {
   return {
    "personaldata": [{
      "name": staffmembername,
      "location": "Iowa"
    },
    {
      "name": "Cynthia",
      "location": "California",
    }
   ]
  };
 }
};
然后像这样使用它:

data().personaldata[0]。位置

您还可以将对象用于
staffmembername

var staffmembernameObject = {};

var data = [{
  personaldata: [{
    name: staffmembernameObject,
...
staffmembernameObject.data = document.getElementById("nr1").value;
然后像这样使用它:
data.personaldata[0].name.data

这是否回答了您的问题?您试图引用一个javascript不支持的基本值(尽管ES2015添加了getter,这会起作用)。这是否回答了您的问题?您正试图引用一个基本值,javascript不支持该值(尽管ES2015添加了getter,这会起作用)。