为什么我不能增加全局变量

时间:2014-02-20 21:49:25

标签: global-variables scoping

我在任何函数之外创建了一个变量q。从我的函数内部,我试图简单地用++增加它。这会增加全局q还是只是将值附加到局部变量?正如您在下面的代码示例中所看到的,我试图使用全局变量的值(我打算在每次执行此脚本时更新)来设置一个应该通过.change触发此函数的变量。该函数最初是触发器(当q = 1时)但是当从id =“selectedId2”的下拉框中进行选择时它不会触发,这使得我认为q保留了值1,尽管我成功地增加了它当函数先前运行时。任何关于如何为此脚本的每次迭代增加变量“q”的建议都将非常感激。

    if (q === 1) {
        selectedDiv = '#selectId1';
        selectedDiv2 = '#selectId2';
    }
    if (q === 2) {
        selectedDiv = '#selectedId2';
        selectedDiv2 = '#selectedId3';
    }
    if (q === 3) {
        selectedDiv = '#selectedId3';
        selectedDiv2 = '#selectedId4';
    }
    if (q === 4) {
        selectedDiv = '#selectedId4';
        selectedDiv2 = '#selectedId5';
    }
    if (q === 5) {
        selectedDiv = '#selectedId5';
        selectedDiv2 = '#selectedId6';
    }

    $(selectedDiv).change(function () {

        if (q == 1) {
            var pullDownDivs = '#2';
        }
        if (q == 2) {
            var pullDownDivs = '#3';
        }
        if (q == 3) {
            var pullDownDivs = '#4';
        }

        if (dropDownSelectJoined != null) {
            var dropDownSelectJoined = dropDownSelectJoined + ", " + $(selectedDiv).val();
        }
        else {
            var dropDownSelectJoined = $(selectedDiv).val();
        }


        var SelArea = $(selectedDiv).val();
        if (SelArea != 0) {
            var url = '@Url.Action("NetworkSubForm")';
            q++;
            $.post(url, { RemovedAreaId: $('#RemovedAreaId').val(), selectedNetworkId: $('#SelectedNetworkId').val(), dropDownSelectJoined: dropDownSelectJoined },
            function (data) {
                var productDropdown = $(selectedDiv2);
                productDropdown.empty();
                productDropdown.append("<option>-- Select Area --</option>");
                for (var i = 0; i < data.length; i++) {
                    productDropdown.append($('<option></option>').val(data[i].Value).html(data[i].Text));
                }
            });
            $(pullDownDivs).show();
            $(pullDownDivs).html();
        }
        else {
            $(pullDownDivs).hide();
            $(pullDownDivs).html();
        }
    });

1 个答案:

答案 0 :(得分:0)

我不知道你的其余代码是什么样的,但是由于“阴影”你可以看到这种行为:

var q = 0; //global "q"
function handler() {
    var q = 0; //local "q" that shadows the global "q";

    ...
    ...

    q++;
    console.log(q);
}

重复调用handler每次都会输出1,因为您要重新定义q内的本地handler。但是,外q保持不变。但如果你这样做了:

var q = 0; //global "q"
function handler() {
    var q = 0; //local "q" that shadows the global "q";

    ...
    ...

    window.q++;
    console.log(window.q);
}

全局q将会更新,因为您通过window.q明确引用它。