繁体   English   中英

javascript数组的范围从IE9到FireFox / Chrome不同

[英]scope of javascript array differs from IE9 to FireFox/Chrome

我已经解决了我的基本问题:数组的范围从IE9到FireFox(和Chrome)都不一样。

在以下函数(仅摘录)中,我声明一个数组,然后用对$ .getJSON()的调用填充它。 因为引用HoldEm的行发生在ProcessArray函数内(甚至在boolSortArray分支内),所以我推测sortedWorking那时将可用。 它在IE9中,但不在FireFox / Chrome中。 在引用的行中,FireFox / Chrome中的sortedWorking为空。 在任何浏览器中都不会发出错误。

实验表明,sortedWorking恰好在标为“ $ .getJSON的结尾”的行之前填充,而在该行之后为空。 有什么想法吗?

function ProcessArray(arWorking, boolSortArray, idX, isPartners, isChildren) {
//...
var sortedWorking = [];
if(boolSortArray) {
  $.getJSON('MurakiMaida.json', function(data) {
    $.each(data.person, function(i, xdata) {
    ...
    sortedWorking.push(targetID + ":" + birthYear);
    ...
    }); //end of $.each
  });   //end of $.getJSON

  var HoldEm = BubbleSort(sortedWorking);

您对“ $ .getJSON()”的调用是异步的 您不能依赖该调用后的代码行中要填充的数组。 相反,把你的代码依赖于该数组被填充它完成处理程序

function ProcessArray(arWorking, boolSortArray, idX, isPartners, isChildren) {
//...
var sortedWorking = [];
if(boolSortArray) {
  $.getJSON('MurakiMaida.json', function(data) {
    $.each(data.person, function(i, xdata) {
    ...
    sortedWorking.push(targetID + ":" + birthYear);
    ...
    }); //end of $.each

     var HoldEm = BubbleSort(sortedWorking);
     // ... whatever else ...
  });   //end of $.getJSON

现在,这也可能意味着您需要重新考虑“ ProcessArray”函数本身,因为类似地,在返回之后,您仍然不能确定该数组是否已被填充。 通常,完成方法是遵循与“ $ .getJSON()”本身完全相同的模式:向“ ProcessArray()”添加一个回调参数,以便其客户端可以传递在数组具有以下内容时要调用的函数被提取和排序,以及其他所有操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM