javascript数组的作用域不同于IE9和FireFox/Chrome

scope of javascript array differs from IE9 to FireFox/Chrome

本文关键字:FireFox Chrome IE9 不同于 数组 作用域 javascript      更新时间:2023-09-26

我已经缩小了我的基本问题:数组的范围从IE9到FireFox(和Chrome)是不同的。

在下面的函数中(仅摘录),我声明了一个数组,然后调用$. getjson()填充它。因为引用HoldEm的行发生在ProcessArray函数中(甚至在boolSortArray分支中),所以我假定sortedWorking在此时可用。它是在IE9,但不是在FireFox/Chrome。在引用的行中,sortedWorking在FireFox/Chrome中为空。在任何浏览器中都没有错误。

实验表明sortedWorking在标记为"end of $"的行之前填充。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()"添加一个回调参数,以便其客户端可以传入一个函数,该函数将在数组被获取和排序以及其他任何事情完成时调用。