JSLint: foi usado antes de ser definido

95

Olá, tenho os 3 arquivos javascript.

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

Em file1.js eu tenho

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

Recebo um erro 'jQuery' foi usado antes de ser definido. e 'documento' foi usado antes de ser definido.

Como posso me livrar desse aviso com segurança.

Se eu fizer

var document = document || {}; 

então, no meu utility.js, se for usado, seria nulo no IE e ok no firefox.

Qual é a melhor solução para isso?

Chun ping Wang
fonte
possível duplicata de JS Lint: 'atalho' foi usado antes de ser definido . Além disso, certifique-se de ter Assumir navegador selecionado nas opções.
Andy E
@ChunpingWang Percebeu que você ainda estava ativo no SO e que faltou uma resposta aceita para esta pergunta. Alguma dessas respostas está faltando algo que é necessário para torná-las aceitáveis? Parece que a resposta de Quentin resolveria o problema conforme solicitado. Alguma informação adicional necessária para responder à sua pergunta?
ruffin de

Respostas:

169

Da documentação

O JSLint também reconhece uma diretiva / * global * / que pode indicar ao JSLint que as variáveis ​​usadas neste arquivo foram definidas em outros arquivos. O comentário pode conter uma lista de nomes separados por vírgulas. Cada nome pode opcionalmente ser seguido por dois pontos e verdadeiro ou falso, verdadeiro indicando que a variável pode ser atribuída por este arquivo e falso indicando que a atribuição não é permitida (que é o padrão). A diretiva respeita o âmbito da função.

Alguns globais podem ser predefinidos para você. Selecione a opção Assumir um navegador (navegador) para predefinir as propriedades globais padrão que são fornecidas pelos navegadores da web, como document e addEventListener.

Exemplo:

/*jslint browser: true*/
/*global $, jQuery*/
Quentin
fonte
25
nota: você não pode colocar um espaço antes, globalentão /* global var, var2 */não funciona. /*global var, var2*/obras
radixhound
4
Plural é equivalente e funciona bem: /*globals */e também faz mais sentido ao adicionar uma lista de variáveis
Robert Koritnik
2
Então a solução para JSLint reclamando de algo faltando em todos os seus arquivos é adicionar uma linha a todos os seus arquivos ... Este é um conselho terrível.
Cerin
@Cerin - Não, a solução para o JSLint reclamar de você usar uma variável para a qual não consegue encontrar uma definição é dizer que você a definiu em outro arquivo (em vez de, por exemplo, cometer um erro de digitação no nome da variável que interromperá seu programa mais tarde).
Quentin de
1
@Quentin, Sim, e sua correção para isso requer que você "informe sobre o jQuery" em cada arquivo. É uma enorme quantidade de trabalho para algo que não traz nenhum benefício. Você também pode simplesmente desativar essa verificação no JSLint.
Cerin de
30

Como diz Quentin, existe uma /*global*/diretiva.

Aqui está um exemplo (coloque-o no topo do arquivo):

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

Certifique-se de que a instrução global inicial esteja na mesma linha /*, ou então ela será interrompida.

Stanton
fonte