Требуется ли предупреждение JSlint «переопределение var counter»? - PullRequest
1 голос
/ 28 октября 2011

У меня есть скрипт длиной в несколько строк, и у меня есть много типов флагов, например

var counter = 0;
var carFlags = {
 Audio : counter++ ,
 Bentley : counter++ ,
 Chrysler : counter++
 Datsun : counter++ 
 ...
};

позже, если я создаю новый объект флага таким же образом

var counter = 0;
var nameFlags = {
 Ashley : counter++ ,
 Bronwyn : counter++ ,
 Catherine : counter++
 DakotaFanning : counter++ 
 ...
};

Он жалуется на то, что counter используется как часть большего утверждения, но я думаю, что это вполне приемлемо здесь.Однако здесь я дважды использовал счетчик, поэтому он предупреждает о redeclaration of var counter.Я мог бы переместить var counter в верхнюю часть страницы, но это могло бы сделать менее понятным, для чего используется counter.Есть ли реальная проблема с использованием var более одного раза?У меня было delete counter заявление, но оно ничего не сделало.Должен ли я изменить его на delete window.counter?

Ответы [ 3 ]

3 голосов
/ 28 октября 2011

Я не совсем уверен насчет вашей области видимости, но если это глобальная область, то delete counter действительно ничего не сделает. Также нет необходимости в delete window.counter, что в любом случае будет одним и тем же (если мы находимся в глобальной среде браузера).

Если вы хотите повторно использовать переменную - простое присваивание:

counter = 0

Причина, по которой JSLint жалуется, заключается в том, чтобы предупредить вас, что вы, возможно, хотели повторно использовать счетчик и случайно набрали var (случалось со мной не раз).

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

EDIT:

Конечно, возникает вопрос, почему вы используете одно и то же имя ...

1 голос
/ 28 октября 2011

Дайте им уникальные имена, и у вас не возникнет никаких проблем.

var carCounter = 0;
var nameCounter = 0;

И при этом вы не столкнетесь с трудностями поиска ошибок, поскольку вы использовали одну и ту же переменную для двух разных задач.

1 голос
/ 28 октября 2011

Нет, проблем нет. Фактически, в Javascript объявления переменных (с var) в любом случае автоматически поднимаются в верхнюю часть их окружения. Например, следующее:

var n = 5;
if (n &lt 3) {
   var q = 2;
   var n = 4;
}

эквивалентно:

var q, n=5;
if (n &lt 3) {
   q = 2;
   n = 4;
}
...