有以下javascript代码
// note: declaring i in this loop
for( var i=0; i<args.length; i++ ) {
var elem = args[i];
...
if( elem.attr == 'class' ) {
// note declaring arr and i in this loop
for( var arr=elem.val.split(' '), i=0; i<arr.length; i++ ) {
element.classList.add(arr[classCt]);
}
continue;
}
}
问题是,第二个i
循环中的for
与第一个i
循环中声明的for
相同。
认为var
构造允许用逗号分隔多个变量。
在第二个循环中将i
更改为classCt
时,代码按预期工作
答案 0 :(得分:7)
您只有一个范围,因此只能有一个具有相同名称的变量。你是正确的,var允许用逗号分隔多个变量,但你不能在同一范围内声明两个具有相同名称的不同变量。您只是重新声明已存在的变量。
将其更改为classCt
,或者执行我的操作并将变量j
(等等)用于嵌套循环迭代器:
var i, j, k, l;
for(i = 0; i < 10; i++){
for(j = 0; j < 10; j++){
for(k = 0; k < 10; k++){
for(l = 0; l < 10; l++){
}
}
}
}
答案 1 :(得分:1)
您只在一个范围内工作,即使您使用var关键字,循环也不会创建它自己的范围。您只是在当前功能范围内覆盖i变量,例如:
for (var i = 0; i < 10; i++) {
for (var i = 5; i < 10; i++) {
console.log(i);
}
}
只打印5,6,7,8,9。
如果你想创建一个新的范围,你必须使用通常在javascript中完成的功能:
for (var i = 0; i < 10; i++) {
(function(i) {
for (var i = 5; i < 10; i++) {
console.log(i);
}
})(i)
}
这将在他们自己的行上打印5,6,7,8,9次。