JSLint: se usó antes de que se definiera

95

Hola, tengo los 3 archivos javascript.

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

En file1.js tengo

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

Recibo un error que se usó 'jQuery' antes de que se definiera. y "documento" se utilizó antes de que se definiera.

¿Cómo puedo deshacerme de esta advertencia de forma segura?

Si lo hago

var document = document || {}; 

luego, en mi utility.js, si se usa, sería nulo en IE y estaría bien en Firefox.

¿Cuál es la mejor solución para esto?

Chun ping Wang
fuente
posible duplicado de JS Lint: se usó 'atajo' antes de que se definiera . Además, asegúrese de tener Asumir navegador seleccionado en las opciones.
Andy E
@ChunpingWang Notó que todavía estaba activo en SO y que a esta pregunta le faltaba una respuesta aceptada. ¿Alguna de estas respuestas falta algo que sea necesario para que sean aceptables? Parece que la respuesta de Quentin resolvería el problema tal como se le preguntó. ¿Alguna información adicional necesaria para responder a su pregunta?
ruffin

Respuestas:

169

De la documentación

JSLint también reconoce una directiva / * global * / que puede indicarle a JSLint que las variables utilizadas en este archivo se definieron en otros archivos. El comentario puede contener una lista de nombres separados por comas. Cada nombre puede ir seguido opcionalmente por dos puntos y puede ser verdadero o falso, verdadero indica que la variable puede ser asignada por este archivo y falso indica que la asignación no está permitida (que es el valor predeterminado). La directiva respeta el alcance de la función.

Algunos globales se pueden predefinir para usted. Seleccione la opción Asumir un navegador (navegador) para predefinir las propiedades globales estándar que proporcionan los navegadores web, como document y addEventListener.

Ejemplo:

/*jslint browser: true*/
/*global $, jQuery*/
Quentin
fuente
25
nota: no puede poner un espacio antes, globalasí /* global var, var2 */que no funciona. /*global var, var2*/trabaja
radixhound
4
Plural es equivalente y también funciona: /*globals */y también tiene más sentido cuando se agrega una lista de variables
Robert Koritnik
2
Entonces, la solución para JSLint quejándose de que falta algo en todos sus archivos es agregar una línea a todos sus archivos ... Este es un consejo terrible.
Cerin
@Cerin - No, la solución a JSLint quejándose de que usted usa una variable para la que no puede encontrar una definición es decirle que la definió en otro archivo (en lugar de, por ejemplo, hacer un error tipográfico en el nombre de la variable que romperá su programa más tarde).
Quentin
1
@Quentin, Sí, y su solución para eso requiere que "le cuente sobre jQuery" en cada archivo. Eso es una enorme cantidad de trabajo para algo que no proporciona ningún beneficio. También podría simplemente deshabilitar esa verificación en JSLint.
Cerin
30

Como dice Quentin, hay una /*global*/directiva.

Aquí hay un ejemplo (ponga esto en la parte superior del archivo):

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

Asegúrese de que la declaración global inicial esté en la misma línea que /*, de lo contrario, se romperá.

Stanton
fuente