start jshintrc all javascript jslint

javascript - jshintrc - Error JSLint: mueva todas las declaraciones ''var'' a la parte superior de la funciĆ³n



jslint vs jshint (7)

A pesar de que la nueva versión beta de JSLint no documenta una directiva de comentarios para la tolerancia var múltiple dentro de una función, parece que admite las directivas de la versión original.

El JSLint original le permitió hacer esto:

/*jslint vars: true */

En mi experiencia, esto sigue funcionando, supongo que por compatibilidad con versiones anteriores. La hora de escribir esto es junio de 2015.

El sitio de JSLint está actualizado y ya no puedo verificar los guiones de JS. Para mí, esta advertencia no es crítica, y no quiero pasar por miles de líneas para solucionar esto, quiero encontrar más problemas críticos.

¿Alguien sabe cómo desactivar este error o usar JSLint heredado?

ACTUALIZAR

Ejemplo:

function doSomethingWithNodes(nodes){ this.doSomething(); for (var i = 0; i < nodes.length; ++i){ this.doSomethingElse(nodes[i]); } doSomething(); // want to find this problem }

Salida de jslint.com:

Error: Problem at line 4 character 8: Move all ''var'' declarations to the top of the function. for (var i = 0; i < nodes.length; ++i){ Problem at line 4 character 8: Stopping, unable to continue. (44% scanned).

Problema:

Tener variables en la parte superior de las funciones es un nuevo requisito. No puedo usar JSLINT para probar el código, porque deja de analizar el script en este error.

Tengo un montón de código y no quiero amenazar esta advertencia como error crítico.

ACTUALIZACIÓN 22/08/2011: encontrado http://jshint.com , se ve mucho mejor que http://jslint.com/


Descubrí que la siguiente sintaxis obtendrá el error eliminado:

function doSomethingWithNodes(nodes) { this.doSomething(); var i; // HERE is where you move the ''var'' to the top of the function for (i = 0; i < nodes.length; ++i) { this.doSomethingElse(nodes[i]); } doSomething(); // want to find this problem }


El compilador de Google Closure realmente no detectará correctamente el tipo de la variable de bucle de a ... en el bucle a menos que se haya declarado como (var i en ...) y ninguna anotación parece arreglar esto, por lo que la declaración no se puede mover a la cima.


Puede descargar versiones heredadas en cualquier momento o modificar la última versión . No es tan difícil, realmente (busca move_var ). Luego ejecute jslint localmente, ya sea usando un nodo o usando un navegador con un formulario HTML simple; puede copiar el original de Crockford.

Tenga en cuenta que la advertencia se introdujo como parte de una reescritura importante , y solo se produce después de for( , por lo que el mensaje es un poco engañoso.



Tuve este problema en mi base de código cuando queríamos cambiar a la última versión de JSLINT. Tuvimos muchos de ellos y las personas no estaban contentos con la mudanza de la declaración. De hecho, descubrimos que la solución más elegante era usar underscore.js y en lugar de tener el bucle detallado completo, usar la función _.each (), que eliminaba el error JSLint y hacía que nuestro código fuera más funcional, más limpio, más ajustado y más fácil de usar. leer.


Actualización de junio de 2017: sujeto a asistencia (por ejemplo, si no está ejecutando JavaScript en Internet Explorer 10 o inferior), debe considerar utilizar let lugar de var .

Por ejemplo: for(let i=0; ...; i++)

No hay forma de que vaya a poner var i; de a for(var i=0; ...; i++) en la parte superior de mis funciones. Especialmente cuando The JavaScript Specification lo tiene como una sintaxis aceptable en la sección for (12.6). Además, es la sintaxis que Brendan Eich usa en sus ejemplos.

La idea de llevar la declaración a la cima es que se supone que refleja con mayor precisión lo que ocurre bajo el capó, sin embargo, hacerlo solo se reflejará, no afectará.

Para mí, esta es una expectativa ridícula for iteraciones. Más aún porque JSLint detiene el procesamiento cuando lo detecta.

Que las variables declaradas en la parte superior de una función sean más legibles es discutible. Personalmente prefiero que las variables de iterador se declaren cuando se utilizan. No me importa si la variable ya está creada internamente, la estoy inicializando aquí, así que estoy a salvo.

Yo argumentaría que declarar una variable de iterador donde se usan garantiza que no se conviertan accidentalmente en globales (si mueve el bucle a otra función, la variable de iterador se moverá con ella). Esto es mucho más fácil de mantener que tener que mantener declaraciones de variables en la parte superior de las funciones.

Por ahora, estoy usando http://www.javascriptlint.com/online_lint.php porque parece enfocarse en lo importante.