javascript语法 - 为什么函数无法识别声明和填充的外部数组

时间:2011-09-06 19:22:30

标签: javascript arrays syntax scope

我在下面写的函数包含数组aarr和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]
.
.
.
}

2 个答案:

答案 0 :(得分:0)

您还将循环移到了函数外部。这可能不起作用,因为这意味着您的getElementById在加载脚本时运行。尚未构建DOM树,因此getElementById返回null

答案 1 :(得分:0)

我认为这不是变量范围的问题,而是你的指数。我不能从示例中找出indexcurrent应该是什么,但无论如何在dom准备好之前运行for循环,那么你的数组显然是空的并且索引将搞砸。