为什么我的变量在第二个if语句中未定义?

时间:2013-02-04 21:08:41

标签: jquery javascript

我正在尝试在第一个if语句的第二个if语句中重用相同的变量,当我发出警报时,我收到警告我的变量为undefined

如何让这个变量在第二个if语句中保留其值?我只是为你复制部分代码,看看我在说什么。我尝试在foundRangeStart的第二个if语句中使用ESNEnd,该语句之前用于if的第一个ESNStart语句中。

为什么foundRangeStart在第二个undefined声明中设置为if

if ($(this).attr("id") == "ESNStart") {
    var esnStart = [];
    esnStart[0] = esn_to_num(enteredData);
    var item;
    var rangesFoundStart = [];

    rangesFoundStart[0] = -1; // Set defaut value as -1 for the corresponding entry in the "rangesFound" array
    for (var x in ranges) { // Inner loop over items in ranges object
        item = esnStart[0];
        if (item >= ranges[x].min && item <= ranges[x].max) {
            rangesFoundStart[0] = x;
        }
    }

    if (rangesFoundStart[0] >= 0) {
        foundRangeStart = rangesFoundStart[0];
    }

    if (foundRangeStart && foundRangeStart >= 0) {
        $("#STxModel").val(ranges[foundRangeStart].StxName);
        $("#TxSpacing").val(ranges[foundRangeStart].rtumodel);
    }
}
if ($(this).attr("id") == "ESNEnd") {
    var esnEnd = [];
    esnEnd[0] = esn_to_num(enteredData);
    var item;
    var foundRangeEnd;
    var rangesFound = [];
    rangesFound[0] = -1; // Set defaut value as -1 for the corresponding entry in the rangesFound array
    for (var x in ranges) { // Inner loop over items in ranges object
        item = esnEnd[0];
        if (item >= ranges[x].min && item <= ranges[x].max) {
            if (rangesFound[x] == foundRangeStart) {
                rangesFound[0] = x;
                var foundone = rangesFound[0] = x;
                alert(foundone + foundRangeStart);
            }
        } else {
            alert(alert_total);
        }

    }
}

3 个答案:

答案 0 :(得分:1)

因为在该控制路径中,尚未设置foundRangeStart

它似乎只在第一个ESNStart块中设置;

if ( rangesFoundStart[0] >= 0 ) {  
    foundRangeStart = rangesFoundStart[0];
}

但如果此语句不等于true;

,则不会执行该行
if ($(this).attr("id") == "ESNStart") { ... }

答案 1 :(得分:1)

  

我正在尝试在ESNEnd的第二个if语句中使用foundRangeStart,该语句以前在ESNStart的第一个if语句中使用

不,它没有在第一个if语句中使用。如果执行第二个,则第一个不执行 - 两个条件$(this).attr("id") == "ESNStart"$(this).attr("id") == "ESNEnd"是互斥的。

答案 2 :(得分:0)

        if ( rangesFoundStart[0] >= 0 ) {  
            foundRangeStart = rangesFoundStart[0];
         }

您在条件中声明变量。如果rangesFoundStart [0]小于0怎么办?然后变量将永远不会被声明。

您可以通过在条件之外声明foundRangeStart来解决此问题。

       var rangesFoundStart = [];
       var foundRangeStart;

            rangesFoundStart[0] = -1; // Set defaut value as -1 for the corresponding entry in the "rangesFound" array
            for (var x in ranges) { // Inner loop over items in ranges object
                item = esnStart[0];
                if (item >= ranges[x].min && item <= ranges[x].max) {
                     rangesFoundStart[0] = x;
                }
            }

        if ( rangesFoundStart[0] >= 0 ) {  
            foundRangeStart = rangesFoundStart[0];
         }