Подтвердить что ты не робот

"Переменная" использовалась до ее определения

Я проверяю, определена ли переменная или нет, и если она не определена явно, я буду определять ее, выполнив:

if ( typeof(aVariable) == 'undefined' ) {
  var aVariable = value;
}

Поскольку переменная не определена, JSLint предупреждает, что она используется до ее определения, и это именно то, что я хочу.

Как я могу это преодолеть?

Я хочу включить определение этих переменных, явно делая это:

<script>
  var aVariable = value;
</script>
<script src="myScript.js"></script>

Таким образом, все, кто собирается включить этот script, могут настроить некоторые из свойств. И я боюсь, что не могу изменить эту логику, потому что она уже используется на сотни веб-сайтов таким образом.

Прокрутите список ответов/решений, потому что я ответил на свой вопрос. Qaru не показывает его. Обязательно не пропустите их.

4b9b3361

Ответ 1

Я нашел более приемлемые ответы в списке рассылки JSLint, извините за это Boldewyn:)

Решение 1

В IE на уровне script (то есть на файл или на блок script), если он видит Декларация "var" во время фазы анализа (перед исполнением), она будет reset значение этой переменной, если оно уже существует.

Так лучше было бы просто сделать это:

/*global foo: true */
if (typeof foo === "undefined") {
foo = "some value";
}

Не объявляя "var" и просто присваивая foo, foo автоматически получит глобальной области.

Решение 2 (специальный случай)

Если явно заданная переменная не равна нулю или false

var foo = foo || "some value";

Ответ 2

Я думаю, что JSLint говорит вам, что вы не должны использовать переменные до их определения. Если вы счастливы, что это уместно в вашем сценарии - вы можете игнорировать это предупреждение. Если вы не совсем уверены, подумайте, почему эта переменная еще не определена.

Например, вы действительно хотите проверить, имеет ли значение aVariable значение, а не определено или не определено?

var aVariable = null;

... (спустя некоторое время)

if (aVariable == null) {
  aVariable = value;
}

Ответ 3

Вы можете сделать переменную (она глобальная) в явном члене window:

window.aVariable = 'default';

и позже

if (! ('aVariable' in window)) {
    window.aVariable = 'new value';
}

Если вы не хотите или не можете изменить код, я бы предложил прагматичный анзац и игнорировать жалобы JSLint, так как ваш код будет работать в любом случае (то есть, пока вы не включите строгое ECMAScript 5 режим...).

Ответ 4

Попробуйте следующее:

aVariable = null;

aVariable = typeof(aVariable) == 'undefined' ? null : value;

Ответ 5

Проще всего объявить переменные перед их использованием:

var aVariable;

Это будет инициализировано типом "undefined", поэтому тест undefined будет работать:

if (typeof aVariable == "undefined") {
    aVariable = value;
}

Ответ 6

Эта ошибка, кажется, срабатывает, когда вы используете корпус верблюда для вашего имени переменной. Если вы запустите переменную с большой буквы (Variable) или сделайте все нижний регистр (переменную), вы просто получите "подразумеваемую глобальную" ошибку.

Я не уверен, что он пытается предложить, применяя оболочку к вашему имени переменной, хотя вам всегда нужно взять JSLint с солью. То, что вы здесь делаете, совершенно справедливо и хорошая практика избегать случайного использования переменных undefined.