2012-05-25 2 views
0

Я использую несколько нетрадиционный для цикла, который хорошо работает для того, что я делаю, как перефразировать ниже (не беспокоить, чтобы показать объявления переменных):Закрытие предупреждение компилятора на цикл

if (arr && arr.length > 0) { 
    for (i = arr.length; i--; i) { 
     element = arr.pop(); 
     //rest of code 
    } 
} 

Закрытие компилятор дает я предупреждаю: «ПРЕДУПРЕЖДЕНИЕ - Подозрительный код. В этом коде не хватает побочных эффектов, есть ли ошибка?» Указывая конкретно на последний «i» в петлях for loop.

Если я удалю i, jslint выдает предупреждение, если я оставлю его, замыкание выдает предупреждение. Есть три из этих циклов в целом, есть ли «закрывающий дружественный» способ сделать это?

ответ

3

Как нормальный путь?

if (arr && arr.length > 0) { 
    for (i = arr.length; i > 0; --i) { 
     element = arr.pop(); 
     //rest of code 
    } 
} 

Ввод убыли в тесте просто не нормальный способ, чтобы написать for петлю.

Или еще более нормально:

if (arr && arr.length > 0) { 
    for (i = arr.length - 1; i >= 0; --i) { 
     element = arr.pop(); 
     //rest of code 
    } 
} 

... а как вы не используете i, это не имеет большого значения.

Или вы могли бы использовать while:

if (arr && arr.length > 0) { 
    i = arr.length; 
    while (i--) { 
     element = arr.pop(); 
     //rest of code 
    } 
} 
+0

@ElliotBonneville: у меня нет. Он не использует 'i', он использует' pop'. –

+0

О, хорошо, хорошо. : P +1 –

+0

Знаешь ... Я не помню, почему я так делал, был долгий день. :) Благодаря. – Shane

0

Да - что-то вроде этого следует сделать трюк:

for (i = arr.length; i > 0; i--) { 
0

Использование jshint довольно JSLint и выключить предупреждение.

1

Для будущих читателей, если Вы уменьшаете длину массива, не используйте for петли, используйте while:

if (arr) { 
    while (arr.length) { 
     element = arr.pop(); 
     ... 
    } 
} 
+0

Приветствия ... никогда бы не сделали этого сейчас ... вроде неловко увидеть его здесь – Shane