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

cc *_*ung 4 javascript variables scope for-loop

有以下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;
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是i第二个for循环i与第一个for循环中声明的相同.

认为该var构造允许用逗号分隔多个变量.

当改变iclassCt在第二循环中,代码发挥预期

Pau*_*aul 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++){
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • @ccyoung这是正确的,Javascript与使用块范围的C等其他语言不同.它使用函数范围(每个函数都有自己的范围,并且有一个全局范围).这是一个阅读更多内容的链接:http://robertnyman.com/2008/10/09/explaining-javascript-scope-and-closures/ (3认同)