JSLint: использовался до того, как он был определен

95

Привет, у меня есть 3 файла javascript.

  • jquery.js
  • utility.js
  • file1.js

В file1.js у меня есть

jQuery.noConflict()
jQuery(document).ready(function($) { 
 // ....
});

Я получаю сообщение об ошибке "jQuery" использовался до того, как он был определен. и слово «документ» использовалось до его определения.

Как мне безопасно избавиться от этого предупреждения.

Если я сделаю

var document = document || {}; 

то в моем файле utility.js, если он используется, он будет нулевым в IE и нормально в firefox.

Какое лучшее решение для этого?

Чун Пинг Ван
источник
возможный дубликат JS Lint: «ярлык» использовался до его определения . Кроме того, убедитесь, что в параметрах выбран « Предположить браузер» .
Andy E
@ChunpingWang Заметил, что вы все еще активны в SO, и на этот вопрос отсутствует принятый ответ. В одном из этих ответов отсутствует что-то необходимое, чтобы сделать их приемлемыми? Похоже, что ответ Квентина решит проблему, как и просили. Нужна дополнительная информация, чтобы ответить на ваш вопрос?
ruffin

Ответы:

169

Из документации

JSLint также распознает директиву / * global * /, которая может указывать JSLint, что переменные, используемые в этом файле, были определены в других файлах. Комментарий может содержать список имен, разделенных запятыми. За каждым именем при желании может следовать двоеточие и значение true или false, true или false, указывающее, что переменная может быть присвоена этому файлу, и false, указывающее, что присвоение не разрешено (что по умолчанию). Директива учитывает объем функции.

Некоторые глобальные переменные могут быть предварительно определены за вас. Выберите параметр «Предположить обозреватель (обозреватель)», чтобы заранее определить стандартные глобальные свойства, предоставляемые веб-обозревателями, такие как документ и addEventListener.

Пример:

/*jslint browser: true*/
/*global $, jQuery*/
Квентин
источник
25
примечание: вы не можете поставить пробел до этого, globalпоэтому /* global var, var2 */не работает. /*global var, var2*/работает
radixhound
4
Множественное число эквивалентно и также работает: /*globals */а также имеет больше смысла при добавлении списка переменных
Роберт Коритник 02
2
Итак, решение JSLint, жалующегося на то, что чего-то не хватает во всех ваших файлах, - добавить строку во все ваши файлы ... Это ужасный совет.
Cerin
@Cerin - Нет, решение JSLint, жалующегося на то, что вы используете переменную, для которой он не может найти определение, состоит в том, чтобы сообщить ему, что вы определили ее в другом файле (в отличие, например, от опечатки в имени переменной что позже сломает вашу программу).
Квентин
1
@Quentin, Да, и ваше исправление требует, чтобы вы "рассказывали о jQuery" в каждом отдельном файле. Это огромный труд для чего-то, что не приносит пользы. Вы также можете просто отключить эту проверку в JSLint.
Cerin
30

Как говорит Квентин, есть /*global*/директива.

Вот пример (поместите это вверху файла):

/*global var1,var2,var3,var4,var5*/

Убедитесь, что исходный глобальный оператор находится в той же строке, что и /*, иначе он сломается.

Стэнтон
источник