【问题标题】:Scope of for loop variable in jquery and javascript [duplicate]jquery和javascript中for循环变量的范围[重复]
【发布时间】:2016-11-02 02:14:16
【问题描述】:

这里是一些引用表单的代码

$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;

这里的字段和上面的字段一样吗??

*/ }

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    这里的字段和上面的字段一样吗?

    是的,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,变量是块范围的,并且只是部分提升。

    【讨论】:

      猜你喜欢
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-12
      • 1970-01-01
      • 1970-01-01
      • 2018-04-25
      • 2013-08-30
      相关资源
      最近更新 更多