style - Funciones vacías en Javascript
title label html (7)
Si tengo algo como esto:
var blah = function() { };
y luego, en el código blah, ¿cuál es la sugerencia de JSLint que dice eliminar el bloque vacío?
Esta
{
...
}
se considera un bloque de código y la sugerencia le permite saber que está vacío (no hay comandos). Sin embargo, no tiene que eliminarlo, como dijo @ Katana314, podría ser intencional.
Lo que me dejó a esta pregunta es que tenía una función vacía en mi espacio de nombres
y cuando llamé a esa función, y
TypeError: MyNamespcae.myFunction is not a function
así que no cree una función vacía, al menos agregue una declaración como void (0); o devuelve null
No sé qué piensa jsLint
pero si esto es un problema y necesita una solución, puede hacer algo como lo siguiente:
var blah = function() { return undefined; }; // or just return;
Actualización: creo que la suposición de Bergi
es correcta porque, en el sitio de jslint en la sección de Required Blocks
:
JSLint espera que si, mientras, las instrucciones do y do se realicen con bloques {es decir, con sentencias encerradas entre llaves} .JavaScript permite escribir un "if" de esta manera: if (condition) statement; se sabe que esta forma contribuye a Errores en proyectos donde muchos programadores están trabajando en el mismo código. Es por eso que JSLint espera el uso de un bloque:
if (condition) { statements; }
La experiencia demuestra que esta forma es más resistente.
Por lo tanto, probablemente solo compruebe los bloques vacíos { }
e invalide la función en blanco.
Si está preguntando qué opción de JsLint desactiva esta advertencia es: "debug: true"
Curiosamente, los documentos no hacen referencia a este comportamiento:
"Tolerar declaraciones de depurador" | depurar Es cierto si se deben permitir las instrucciones del depurador . Establezca esta opción en falso antes de entrar en producción.
Pero si observa el código , puede ver que no le avisará con la opción de depuración establecida en verdadero:
function block(kind) {
// A block is a sequence of statements wrapped in braces.
...
if (kind !== ''catch'' && array.length === 0 && !option.debug) {
curly.warn(''empty_block'');
}
...
}
Si pretende utilizar la función como un constructor con el new
operador:
// Returns the instance that was just created with the new operator.
var ClassLikeFunction = function(){
return this;
};
Por otro lado, si es intencionalmente una función en blanco sin valor de retorno:
// Returns the same value as a function that returned nothing.
var blankFunction = function(){
return undefined;
};
Una gran cantidad de verificadores de código comprueban este tipo de cosas. No significa que nunca debas tener bloques de código vacíos. A veces hay razones válidas para tenerlos. Pero a menudo significa que el programador se olvidó de escribir la implementación. :)
Lo que me gusta hacer es poner un comentario en el cuerpo de la función, explicando por qué está vacío. Esto debería suprimir la advertencia, pero puede no depender de si el verificador de código considera un bloque de código con un comentario "vacío".
var blah = function() { /* empty because ... */ };
Usa la expresión lambda:
const blah = () => void 0;
Esto dejará claro que blah
es una función vacía que devuelve undefined
.