繁体   English   中英

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

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

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

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

我认为变量作用域不是问题,但您的索引不是问题。 我不能从示例中完全弄清楚应该使用什么indexcurrent值,但是无论哪种方式,如果在dom准备就绪之前运行了for循环,则您的数组显然是空的,索引将被弄乱。

暂无
暂无

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

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