в JavaScript объявите более одной переменной в цикле for - PullRequest
4 голосов
/ 18 марта 2012

имеют следующий код 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 ]

7 голосов
/ 18 марта 2012

У вас есть только одна область видимости, поэтому может быть только одна переменная с тем же именем.Вы правы, что 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 голос
/ 18 марта 2012

Вы работаете только в одной области, цикл не создает ее, даже если вы используете ключевое слово 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 в собственных строках 10 раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...