![](/img/trans.png)
[英]JavaScript function declared outside addEventListener does not work
[英]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
。
我认为变量作用域不是问题,但您的索引不是问题。 我不能从示例中完全弄清楚应该使用什么index
和current
值,但是无论哪种方式,如果在dom准备就绪之前运行了for循环,则您的数组显然是空的,索引将被弄乱。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.