我在一个函数之外声明一个变量:
var vitalsValuesChecked = [];
然后在我做的函数内部:
vitalsValuesChecked.push('foobar');
在稍后的函数中,我需要遍历数组以推送项目,并且经常无法获得我期望的结果。所以在同一个函数中,我添加了console.log(vitalsValuesChecked);
,返回[]
。
编辑以下代码示例; 编辑2 下面的固定代码
var vitalsValuesChecked = [];
$(document).delegate("#hv-byresult-btn", "click", function () {
var vitalsTypeList = ['bp', 'ht', 'wt', 'pulse', 'resp', 'temp'];
vitalsValuesChecked = [];
for (var i = 0;i < vitalsTypeList.length;i++) {
if (document.getElementById(vitalsTypeList[i]).checked == true) {
vitalsValuesChecked.push(vitalsTypeList[i]);
console.log(vitalsTypeList[i] + " is checked. Adding to global array");
}
}
$('#vitals-measures-content').empty();
navigate("#vitals-measures");
for (var i = 0;i < vitalsValuesChecked.length;i++) {
console.log("vitalsValuesChecked at index " + i + " is " + vitalsValuesChecked[i]);
}
readRec('clinicalObservation', null, sortVitalsByResult);
});
function foobar() {
console.log(vitalsValuesChecked); //return []
for (var i=0;i < vitalsValuesChecked.length;i++) {
var valueSelected = vitalsValuesChecked[i];
console.log("Value of vitalsValuesChecked at index " + i + " is " + vitalsValuesChecked[i]);
}
}
答案 0 :(得分:2)
您已定义vitalsValuesChecked
两次,这是一个问题。一个是全局的,一个是delegate()回调的本地。本地定义会覆盖全局定义,因此当您认为将值设置为全局变量时,您不是 - 您只是更改了具有有限生命周期的局部变量,因此您的数据在以后的全局变量中不可用。 / p>
你应该删除
var vitalsValuesChecked = [];
在委托处理程序内部,因此所有修改都发生在单个全局变量上。
答案 1 :(得分:1)
函数内的var vitalsValuesChecked = [];
将创建一个局部变量。如果你想要推动全局变量,我认为你不想要这个。