jquery和javascript中for循环变量的范围

时间:2016-06-30 06:24:34

标签: javascript jquery

这是一些引用表单的代码

$form.submit(function(e) {

        e.preventDefault();

        var fields = ['id', 'name', 'subject', 'theory', 'practical']; //?
        var record = {};

        for (var index in fields) {

            var field = fields[index];

            if (field == 'id' || field == 'theory' || field == 'practical')
                record[field] = parseInt( $('input#'+field).val() );

            else
                record[field] = $('input#'+field).val();

        }

/ * 现在在这个位置,如果我初始化一个$ .ajax方法,并在其中我再次创建一个for循环

for (var field in record) {

                            if (field == 'id')
                                continue;

这里的字段是否与上面的字段相同?

* / }

1 个答案:

答案 0 :(得分:0)

  

此处的字段是否与上面的字段相同?

是的,var是。它不适用于ES2015中的let,但它与var一致,因为函数中任何位置的var都有函数范围,而声明已提升到他们所处的职能之首。

如果我们添加该循环,我们得到:

$form.submit(function(e) {

    e.preventDefault();

    var fields = ['id', 'name', 'subject', 'theory', 'practical']; //?
    var record = {};

    for (var index in fields) {

        var field = fields[index];

        if (field == 'id' || field == 'theory' || field == 'practical')
            record[field] = parseInt($('input#' + field).val());

        else
            record[field] = $('input#' + field).val();

    }
    for (var field in record) {

        if (field == 'id')
            continue;
    }
});

的处理方式与此完全相同:

$form.submit(function(e) {
    // All of the variables are declared before step-by-step code runs
    var fields;
    var record;
    var index;
    var field;

    e.preventDefault();

    fields = ['id', 'name', 'subject', 'theory', 'practical']; //?
    record = {};

    for (index in fields) {

        field = fields[index];

        if (field == 'id' || field == 'theory' || field == 'practical')
            record[field] = parseInt($('input#' + field).val());

        else
            record[field] = $('input#' + field).val();

    }
    for (field in record) {

        if (field == 'id')
            continue;
    }
});

如果您使用let,那么就是真的。对于let,变量是块范围的,只是部分悬挂。