我在下面写的函数包含数组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]
.
.
.
}
答案 0 :(得分:0)
您还将循环移到了函数外部。这可能不起作用,因为这意味着您的getElementById
在加载脚本时运行。尚未构建DOM树,因此getElementById
返回null
。
答案 1 :(得分:0)
我认为这不是变量范围的问题,而是你的指数。我不能从示例中找出index
和current
应该是什么,但无论如何在dom准备好之前运行for循环,那么你的数组显然是空的并且索引将搞砸。