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

在javascript中,在for循环中声明多个变量,javascript,variables,for-loop,scope,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

具有以下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

对于(var i=0;i您在那里只有一个作用域,因此只能有一个同名变量。您正确地认为,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++){
            }
        }
    }
}
var i,j,k,l;
对于(i=0;i<10;i++){
对于(j=0;j<10;j++){
对于(k=0;k<10;k++){
对于(l=0;l<10;l++){
}
}
}
}

您只在一个作用域内工作,即使您使用var关键字,循环也不会创建自己的循环。您只是在当前功能范围内覆盖i变量,例如:

for (var i = 0; i < 10; i++) {
        for (var i = 5; i < 10; i++) {
            console.log(i);
        }
}
for(变量i=0;i<10;i++){
对于(变量i=5;i<10;i++){
控制台日志(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)
}
for(变量i=0;i<10;i++){
(职能(一){
对于(变量i=5;i<10;i++){
控制台日志(i);
}
})(一)
}

这将在它们自己的行上打印5、6、7、8、9 10次。

“当在第二个循环中将i更改为classCt时,代码按预期工作”-那你为什么不继续呢?将
i
更改为
classCt
在哪里?第二个for循环中的
i
实际上与第一个相同,因为你没有用
var
再次初始化它。你是对的。在
for
循环中声明的变量在循环终止后可见,因此范围不是rest对
循环本身的
。@cYoung这是正确的,Javascript与其他一些语言不同,比如使用块作用域的C语言。它使用函数作用域(每个函数都有自己的作用域,并且有一个全局作用域)。这里有一个链接可以阅读更多内容:@Niko-think可以使用{}创建新的作用域block-这不是真的吗?@ccyoung不,这不是真的。正如Paul所解释的,只有函数才能在javascript中创建新的作用域。这一点很重要,因为这在很多其他语言(如Java或C)中都是不同的。请看这个提琴演示:@Niko从技术上讲,
with
在某些情况下也足够了……但这不是推荐的ded:)但使用“var”是否会将作用域限制在函数上?如果是,如何在for循环中声明2个变量P