带有jquery .push的Javascript全局数组在备用函数中返回空数组

Javascript global array with jquery .push returns empty array in alternate function

本文关键字:数组 函数 备用 返回 带有 push Javascript 全局 jquery      更新时间:2023-09-26

我在函数之外声明了一个变量,如下所示:

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]);
    }
}

您已经定义了两次vitalsValuesChecked,这是一个问题。 一个是全局的,一个是 delegate() 回调的本地。 局部定义覆盖全局定义,因此当您认为您将值设置为全局变量时,您不是 - 您只是更改了具有有限生存期的局部变量,因此您的数据稍后在全局变量中不可用。

您应该删除

var vitalsValuesChecked = [];

在委托处理程序中,以便所有修改都发生在单个全局变量上。

函数内部的var vitalsValuesChecked = [];将创建一个局部变量。 如果您尝试推送到全局变量,我认为您不希望这样做。