javascript - validacion - JSLint: Usar una función antes de que se haya definido un error
validar nombre javascript (8)
Como este es el hit mejor valorado de Google y otras personas podrían no verlo al principio en la herramienta jslint, hay una opción llamada "Tolerar definiciones mal ordenadas" que le permite ocultar este tipo de error.
/*jslint latedef:false*/
Estoy usando JSLint para verificar la mayoría de mis archivos Javascript externos, pero la mayor cantidad de errores que obtengo proviene de las funciones que se usan antes de que se definan.
¿Es esto realmente un problema por el que debería preocuparme ?
Parece que a Firefox, IE7 y Chrome no les importa. Las funciones como el popular init()
(que uso a menudo) normalmente se pegan en la parte superior, ya que eso tiene sentido para mí (me gusta pretender que es análogo a main()
), según JSLint, necesitan ser empujadas al fondo de el archivo.
Desde el sitio web de jslint ( http://www.jslint.com/lint.html ), puede leer acerca de una directiva / * global * / que le permite establecer variables que se supone serán declaradas en otro lugar.
Aquí hay un ejemplo (ponga esto en la parte superior del archivo):
/*global var1,var2,var3,var4,var5*/
The: true: false no es realmente necesario desde mi experiencia, pero parece que está recomendado por lo que leo en el sitio.
Asegúrese de que la declaración global inicial esté en la misma línea que /*
, o de lo contrario se rompe.
En su archivo .jshintrc
, configure:
"latedef": "nofunc",
Para deshabilitar esta advertencia en jshint
para todos los archivos, coloque esto en su archivo .jshintrc
:
{
"latedef": false
}
Si declara funciones usando la palabra clave function
, puede usarlas antes de declararlas. Sin embargo, si declara una función a través de otro método (como usar una expresión de función o el constructor de Function
), debe declarar la función antes de usarla. Consulte esta página en la Red de desarrolladores de Mozilla para obtener más información.
Suponiendo que declaras todas tus funciones con la palabra clave function
, creo que se convierte en una pregunta de programación. Personalmente, prefiero estructurar mis funciones de una manera que parece lógica y hace que el código sea lo más legible posible. Por ejemplo, como tú, pondría una función init
en la parte superior, porque es de donde todo comienza.
Si está utilizando jshint, puede establecer latedef
a nofunc
, que ignorará las definiciones de función tardía solamente.
Documentación - http://www.jshint.com/docs/options/#latedef
Ejemplo de uso:
/* jshint latedef:nofunc */
noop();
function noop() {}
Espero que esto ayude.
Siempre puede declarar la función ofensiva en la parte superior
por ejemplo: var init;
.... pero luego tendrás que eliminar la "var" cuando llegues a la definición verdadera más abajo:
init = function () {};
es muy desafortunado que la opción latedef haya sido eliminada. Esto es esencial cuando se trata de crear una ''clase'' con una interfaz en la parte superior, es decir,
function SomeClass() {
var self = this;
self.func = func;
function func {
...
}
}
Este estilo es muy común pero no pasa jsLint porque func es ''usado'' antes de ser definido. Tener que usar global para cada función de ''miembro'' es un dolor total.