Javascript语法-为什么函数不能识别已声明和填充的外部数组

javascript syntax - why function does not recognize an outside array that is declared and filled

本文关键字:声明 填充 数组 外部 识别 语法 为什么 函数 不能 Javascript      更新时间:2023-09-26

我在下面写的函数包含数组arr和barr来存储DOM调用,以减少DOM遍历。它现在可以工作,但是我想在其他函数中重用这些数组,所以我试图将数组声明和for循环移到函数之外,当它到达第一个引用aarr[I]时,函数出错,好像函数不识别aarr[]。我知道"var"会给范围,但我试着删除/包括var,它仍然不起作用。

请解释

TIA

当在函数内部声明aarr[](编辑为包含for循环的结束标记)

function display (namearr, current) {
var aarr = [];
var barr = [];

for (var z=1; z<=10; z++) {
  c = z-1;
  aarr[c] = document.getElementById("a"+z);
  barr[c] = document.getElementById("b"+z);
 }
 var tldstr = document.getElementById("dlist").innerHTML;
    tldstr = tldstr.slice(0, -1)
    var tldarr = tldstr.split(",");
    index = current - 1;    
    var arrlen = tldarr.length;
    var img = "<img src='../loader1.gif' alt='loading' width='40' />";
    for (i=0; i<10; i++){

      if (index >= arrlen) {
            aarr[i].className = "tldn";
            barr[i].className = "tldn";

      }
      else if ( tldarr[index] == "n" || tldarr[index].length != 6) 
            {
            aarr[i].innerHTML = img;
            barr[i].innerHTML = img;

            }//close  first elseif
      else {
            tldstr = tldarr[index];
            aarr[i].className = "tld"+tldstr.charAt(0);
            barr[i].className = "tld"+tldstr.charAt(1);
           }//close second elseif
        index++;
        }//close first for loop
}

这不起作用(无论是否使用"var"声明),函数在第一次遇到aarr[i]时出错

var aarr = [];
var barr = [];

for (var z=1; z<=10; z++) {
  c = z-1;
  aarr[c] = document.getElementById("a"+z);
  barr[c] = document.getElementById("b"+z);
function display (namearr, current) {
.
.
.
           aarr[i].className = "tldn"; //function errors out at first encounter of aarr[i]
.
.
.
}

您还将循环移到了函数外部。这可能行不通,因为这意味着您的getElementById在加载脚本时运行。DOM树没有被构造,所以getElementById返回null

我不认为这是一个问题与变量范围,但与您的索引。我不能从这个例子中完全弄清楚indexcurrent应该是什么,但无论哪种方式,如果在dom准备好之前运行for循环,那么你的数组显然是空的,索引将被打乱。