在javascript中,在for循环中声明多个变量

时间:2012-03-18 01:52:02

标签: javascript variables for-loop scope

有以下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时,代码按预期工作

2 个答案:

答案 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次。