JSLint: è stato utilizzato prima di essere definito


95

Ciao, ho i 3 file javascript.

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

In file1.js ho

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

Ottengo un errore "jQuery" è stato utilizzato prima che fosse definito. e "documento" è stato utilizzato prima di essere definito.

Come posso eliminare in sicurezza questo avviso.

Se lo faccio

var document = document || {}; 

quindi nel mio utility.js se viene utilizzato, sarebbe nullo in IE e ok in firefox.

Qual è la migliore soluzione a questo?


possibile duplicato di JS Lint: 'shortcut' è stato utilizzato prima che fosse definito . Inoltre, assicurati di aver selezionato Assumi browser nelle opzioni.
Andy E

@ChunpingWang Notato che eri ancora attivo su SO e a questa domanda mancava una risposta accettata. In una di queste risposte manca qualcosa che è necessario per renderle accettabili? Sembra che la risposta di Quentin risolverebbe il problema come chiesto. Hai bisogno di ulteriori informazioni per rispondere alla tua domanda?
ruffin

Risposte:


169

Dalla documentazione

JSLint riconosce anche una direttiva / * global * / che può indicare a JSLint che le variabili utilizzate in questo file sono state definite in altri file. Il commento può contenere un elenco di nomi separati da virgole. Ogni nome può facoltativamente essere seguito da due punti e true o false, true indica che la variabile può essere assegnata da questo file e false indica che l'assegnazione non è consentita (che è l'impostazione predefinita). La direttiva rispetta l'ambito della funzione.

Alcuni globali possono essere predefiniti per te. Selezionare l'opzione Assumi un browser (browser) per predefinire le proprietà globali standard fornite dai browser Web, come document e addEventListener.

Esempio:

/*jslint browser: true*/
/*global $, jQuery*/

25
nota: non puoi inserire uno spazio prima, globalquindi /* global var, var2 */non funziona. /*global var, var2*/funziona
radixhound

4
Il plurale è equivalente e funziona: /*globals */e ha anche più senso quando si aggiunge un elenco di variabili
Robert Koritnik

2
Quindi la soluzione a JSLint che si lamenta di qualcosa che manca a tutti i tuoi file è aggiungere una riga a tutti i tuoi file ... Questo è un consiglio terribile.
Cerin

@Cerin - No, la soluzione a JSLint che si lamenta del tuo utilizzo di una variabile per la quale non riesce a trovare una definizione è dirgli che l'hai definita in un altro file (al contrario, ad esempio, di un errore di battitura nel nome della variabile che interromperà il programma in seguito).
Quentin

1
@Quentin, Sì, e la tua correzione richiede che tu "gli parli di jQuery" in ogni singolo file. È un'enorme quantità di lavoro per qualcosa che non fornisce alcun vantaggio. Potresti anche disabilitare semplicemente quel controllo in JSLint.
Cerin

30

Come dice Quentin, c'è una /*global*/direttiva.

Ecco un esempio (mettilo all'inizio del file):

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

Assicurati che l'istruzione globale iniziale sia sulla stessa riga di /*, altrimenti si interrompe.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.