2011-09-15 19 views
22

¿Por qué JSLint se queja si algo utiliza una función que no se ha definido ya? El punto es que la función está definida, y si ese algo llama a esa función, esa función existe y las cosas funcionarán.error de jsLint: "somefunction() se usó antes de definirse"

Tome una mirada en el código de abajo:

function foo() 
{ 
    // calls bar() 
}; 

function bar() 
{ 
    // calls foo() 
}; 

No hay manera de organizar los 2 métodos de tal manera que haría JSLint feliz. ¿Cómo trato este problema?

Respuesta

13

Ver esta respuesta:

Contending with JS "used before defined" and Titanium Developer

Básicamente, si se utiliza la forma foo = function() { ... }, se puede declarar var foo, bar; en la parte superior para evitar los errores JSLint.

+5

Pero eso solo es un poquito diferente de 'function foo()', que es expresión de función y todo. Además, declarar 'var foo, bar' en la parte superior es superfluo debido a la elevación. Entonces, en resumen, 'var foo = function() ..., var bar = function() ...' funcionará bien técnicamente. Además, creo, teniendo en cuenta que las declaraciones de funciones se cargan antes que cualquier otra cosa, JSLint ya debería arreglar sus cosas. – ZenMaster

+8

@ZenMaster: una bifurcación de 'jslint', [' jsHint'] (http://www.jshint.com/docs/), resolvió esto permitiéndole configurar '" latedef ": false' en las opciones. (No afecta los nombres de las variables, solo los nombres de las funciones.) –

+1

Esta respuesta romperá el código que depende de la definición de la función ◆ –

15

JSLint no puede manejar esto hasta donde yo sé, pero JSHint, basado en JSLint, aborda este problema de manera adecuada.

Simplemente use la propiedad "latedef" y configúrelo como "falso". En caso de que, no obstante, desee detectar este tipo de definiciones de variables problemáticas, pero desea utilizar expresiones de funciones y permitir el izado de estas funciones, puede configurar "latedef": "nofunc".

Échale un vistazo a here.

+0

Una nota - El valor "nofunc" para la opción "latedef" ayuda a evitar la inspección de declaraciones de funciones (no expresiones) – Alexei

Cuestiones relacionadas