Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript中的全局变量?_Javascript_Jquery - Fatal编程技术网

javascript中的全局变量?

javascript中的全局变量?,javascript,jquery,Javascript,Jquery,我有以下代码: $(".link").each(function() { group += 1; text += 1; var links = []; links[group] = []; links[group][text] = $(this).val(); } }); var jsonLinks = $.toJSON(links)

我有以下代码:

    $(".link").each(function() {
            group += 1;
            text += 1;
            var links = [];
            links[group] = [];

            links[group][text] = $(this).val();
        }
    });

    var jsonLinks = $.toJSON(links);

在循环了each.link之后,它将退出each循环,并将数组“links”编码为json。但是数组“links”是每个循环中的局部变量。如何使其成为循环外的全局链接?

定义
链接
循环外:

var links = [];
$(".link").each(function() {
  group += 1;
  text += 1;
  links[group] = [];
  links[group][text] = $(this).val();
});
var jsonLinks = $.toJSON(links);
我还应该指出,这没有多大意义,因为您将以元素7结尾,例如,作为一个数组,该数组的值只有一个元素(索引为7)。这真的是你想要的吗

我想你们想要的是一个值数组。如果是,为什么不使用


只需在代码块之前声明它:

var links = [];
$(".link").each(function() {
        group += 1;
        text += 1;
        links[group] = [];
        links[group][text] = $(this).val();
    }
});

var jsonLinks = $.toJSON(links);
或者干脆删除“var”:

$(".link").each(function() {
        group += 1;
        text += 1;
        links = [];
        links[group] = [];
        links[group][text] = $(this).val();
    }
});

var jsonLinks = $.toJSON(links);
创建一个闭包:

{    
    var links = [];
    $(".link").each(function() {
            group += 1;
            text += 1;

            links[group] = [];

            links[group][text] = $(this).val();
        }
    });

    var jsonLinks = $.toJSON(links);
}

要定义全局变量,您可以

a)定义函数外部的变量(如其他答案中所述)

b)将变量附加到窗口对象


$(".link").each(function() {
            group += 1;
            text += 1;
            window.links = [];
            links[group] = [];

            links[group][text] = $(this).val();
        }
    });

    var jsonLinks = $.toJSON(links);

c)创建一个不带var关键字的变量


$(".link").each(function() {
            group += 1;
            text += 1;
            links = [];
            links[group] = [];

            links[group][text] = $(this).val();
        }
    });

    var jsonLinks = $.toJSON(links);


JavaScript只理解两个作用域

  • 全局:是函数之外的任何变量,变量声明时不使用var

  • 函数:函数中的任何内容

  • 因此,我将向您推荐如下的闭包方法

     function getJSONLinks()
     {
          var links = [];
          $(".link").each(function() {
            group += 1;
            text += 1;
            links[group] = [];
            links[group][text] = $(this).val();
           }
         });
         return $.toJSON(links);
     }
    

    可能被骗()?您的问题出现了两次。最好删除这个。我不太懂地图的功能。我读了文件,但还是不明白。你能解释一下发生了什么事吗?什么是“我”和“瓦尔”?return是什么意思?
    map()
    将函数应用于数组的每个元素。因此,为每个元素调用该函数。函数返回的内容都在结果数组中。回调的参数是i(从0开始的数字匹配)和val(数组元素,也是this)。
    
    $(".link").each(function() {
                group += 1;
                text += 1;
                links = [];
                links[group] = [];
    
                links[group][text] = $(this).val();
            }
        });
    
        var jsonLinks = $.toJSON(links);
    
    
     function getJSONLinks()
     {
          var links = [];
          $(".link").each(function() {
            group += 1;
            text += 1;
            links[group] = [];
            links[group][text] = $(this).val();
           }
         });
         return $.toJSON(links);
     }